如何获取PostgreSQL的列级别默认collation详情
查询PostgreSQL列级别Collation详情的方法
PostgreSQL支持列级别的Collation设置,你可以通过以下两种常用方式查询列的Collation信息:
1. 用information_schema.columns视图查询
这是最简洁直观的方式,直接读取列的collation_name字段:
SELECT table_name, column_name, data_type, collation_name FROM information_schema.columns WHERE table_schema = 'public'; -- 替换为你的目标模式名
查询结果里,collation_name就是该列的Collation。如果这个字段为NULL,说明该列没有显式设置Collation,会依次继承表、数据库、实例级的默认Collation。
2. 用pg_catalog系统表查询
如果需要更底层的系统信息,可以关联pg_attribute和pg_collation表:
SELECT c.relname AS table_name, a.attname AS column_name, t.typname AS data_type, col.collname AS collation_name FROM pg_attribute a JOIN pg_class c ON a.attrelid = c.oid JOIN pg_type t ON a.atttypid = t.oid LEFT JOIN pg_collation col ON a.attcollation = col.oid WHERE c.relkind = 'r' -- 仅查询普通表 AND a.attnum > 0 -- 排除系统内部列 AND c.relnamespace = 'public'::regnamespace; -- 替换为你的目标模式名
这里pg_attribute.attcollation存储了列的Collation对象ID,关联pg_collation后就能拿到对应的Collation名称。
额外说明
- 若要修改列的Collation,可执行语句:
ALTER TABLE 表名 ALTER COLUMN 列名 SET COLLATION 目标collation名; - 实例级的默认Collation由初始化数据库时的
lc_collate参数决定,数据库级的默认Collation可通过ALTER DATABASE修改。
内容的提问来源于stack exchange,提问作者Srikesh_Iyer
相关产品推荐
相关产品推荐

