我正在使用 PostgreSQL 数据库,需要更改特定文本列的排序规则设置。但是,我不想更改整个数据库的排序规则。
数据库目前在整数列(特别是 ID 列)上建立了不区分大小写的索引,而我想要修改的文本列上没有索引。我假设仅更改文本列的排序规则应该不会造成任何问题,因为这些列上没有索引。
我的问题是:即使数据库的排序规则没有改变并且没有索引受到影响,更改文本列上的排序规则是否会导致现有数据或查询出现任何问题?
在这种情况下我应该注意哪些性能考虑或潜在问题?
当前数据库排序规则设置为Turkish_Turkey.1254,如以下查询所示:
SELECT datname, datcollate, datctype
FROM pg_database
WHERE datname = '';
要将数据库中所有文本类型列的排序规则更改为不区分大小写的排序规则,我运行以下 PL/pgSQL 块:
DO $$
DECLARE
t record;
BEGIN
FOR t IN
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE table_catalog = ''
AND data_type = 'text'
AND table_schema NOT LIKE 'pg_%'
ORDER BY table_schema
LOOP
EXECUTE format('ALTER TABLE %I.%I ALTER COLUMN %I SET DATA TYPE text COLLATE "tr-x-icu"',
t.table_schema, t.table_name, t.column_name);
END LOOP;
END
$$;