Re: Converting char to varchar automatically
От | hari.fuchs@gmail.com |
---|---|
Тема | Re: Converting char to varchar automatically |
Дата | |
Msg-id | 871tqhphli.fsf@hf.protecting.net обсуждение исходный текст |
Ответ на | Converting char to varchar automatically ("Andrus" <kobruleht2@hot.ee>) |
Список | pgsql-general |
"Andrus" <kobruleht2@hot.ee> writes: > Hi! > > Thank you. > >>This revised query should give you what you need: >>SELECT 'ALTER TABLE ' || quote_ident(n.nspname) || '.' >> || quote_ident(c.relname) >> || ' ALTER COLUMN ' || quote_ident(a.attname) || ' TYPE varchar(' || i.character_maximum_length || ');' >> FROM pg_class c >> JOIN pg_namespace n ON n.oid = c.relnamespace >> JOIN pg_attribute a ON a.attrelid = c.oid >> JOIN pg_type t ON t.oid = a.atttypid >> JOIN information_schema.columns i ON (i.table_name = c.relname AND i.column_name = a.attname) >>WHERE t.typname = 'bpchar' >> AND c.relkind = 'r' >> AND n.nspname <> 'pg_catalog' and not attisdropped; > > How to create single alter table command for every table ? > Can we use string concat aggregate function or window functions or plpgsql or something other ? string_agg should do it: SELECT 'ALTER TABLE ' || quote_ident(n.nspname) || '.' || quote_ident(c.relname) || ' ' || string_agg('ALTER COLUMN ' || quote_ident(a.attname) || ' TYPE varchar(' || i.character_maximum_length || ')', ', ') || ';' FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace JOIN pg_attribute a ON a.attrelid = c.oid JOIN pg_type t ON t.oid = a.atttypid JOIN information_schema.columns i ON i.table_name = c.relname AND i.column_name = a.attname WHERE t.typname = 'bpchar' AND c.relkind = 'r' AND n.nspname <> 'pg_catalog' and not attisdropped GROUP BY n.nspname, c.relname;
В списке pgsql-general по дате отправления: