On Jun 21, 2011, at 9:58 PM, Noah Misch wrote: > > A pg_regress test needs stable output, so we would do it roughly like this: > > CREATE TEMP TABLE relstorage AS SELECT 0::regclass AS oldnode; > ... > UPDATE relstorage SET oldnode = > (SELECT relfilenode FROM pg_class WHERE oid = 'test'::regclass); > ALTER TABLE test ALTER name TYPE varchar(65535); > SELECT oldnode <> relfilenode AS rewritten > FROM pg_class, relstorage WHERE oid = 'test'::regclass; > > I originally rejected that as too ugly to read. Perhaps not.
Yes, your example is more appropriate. I think you can make it more straightforward by getting rid of the temp table: CREATE TABLE test(oldnode oid, name varchar(5)); INSERT INTO test(oldnode) SELECT relfilenode FROM pg_class WHERE oid='test'::regclass; ALTER TABLE test ALTER name TYPE varchar(10); SELECT oldnode <> relfilenode AS rewritten FROM pg_class, test WHERE oid='test'::regclass; > >> The only nitpick code-wise is these lines in varchar_transform: >> >> + int32 old_max = exprTypmod(source) - VARHDRSZ; >> + int32 new_max = new_typmod - VARHDRSZ; >> >> I have a hard time understanding why VARHDRSZ is subtracted here, so I'd >> assume that's a bug. > > We track the varchar typmod internally as (max length) + VARHDRSZ. Oh, right, haven't thought that this is a varchar specific thing. Thank you, Alexey. -- Command Prompt, Inc. http://www.CommandPrompt.com PostgreSQL Replication, Consulting, Custom Development, 24x7 support -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers