Заменить символы во всех таблицах в базе данных Postgres - PullRequest
1 голос
/ 02 июня 2011

Я использую PostgreSQL с pgadmin.Мне нужно заменить несколько символов во всех полях типа string и во всех таблицах в моей базе данных.

Ответы [ 2 ]

1 голос
/ 02 июня 2011

В этом списке будут перечислены все столбцы типа «символ» в вашей базе данных:

SELECT t.tablename, a.attname AS column_name
FROM pg_attribute a
JOIN pg_class c ON a.attrelid = c.oid
JOIN pg_tables t ON t.tablename = c.relname
JOIN pg_type on pg_type.oid = a.atttypid
WHERE t.schemaname not in ('information_schema', 'pg_catalog')
and pg_type.typname in ('varchar', 'text', 'char')
order by 1,2;

Затем вы должны пройти и выполнить обновления.

1 голос
/ 02 июня 2011

Используйте приведенное ниже с осторожностью - при необходимости измените его и убедитесь, что вы просматриваете каждый результирующий запрос (да - это генерирует набор результатов запросов) перед копированием результатов и выполнением - поскольку это может включать запросы, которые будут пытаться изменить представления, вычисляемые поля, системные таблицы и т. д. и т. д.

Я T-SQL'er - но я считаю, что приведенное ниже должно быть допустимо в PostgresSQL.

SELECT 'UPDATE ' || TABLE_SCHEMA || '.' || TABLE_NAME ||
       ' SET ' || COLUMN_NAME || ' = REPLACE(' || 
       COLUMN_NAME || ', ''FROM'', ''TO'')'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE LIKE '%char%'

Для получения дополнительной информации, которая может дать идеи о том, как настроить этот запрос, посмотрите INFORMATION_SCHEMA.COLUMNS .

...