PostgreSQL如何检查表是否是通过WITH OIDS参数创建的?
如何查询PostgreSQL中使用
WITH OIDS创建的表 1. 系统目录pg_*查询(最准确)
PostgreSQL的系统目录pg_class中relhasoids布尔字段专门记录表是否开启OID:
- 普通用户表的
relkind值为r,结合relhasoids = true筛选即可得到所有通过WITH OIDS创建的用户表,包括受default_with_oids配置影响隐式开启OID的表 - 参考查询语句:
SELECT n.nspname AS schema_name, c.relname AS table_name FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid WHERE c.relkind = 'r' AND c.relhasoids = true AND n.nspname NOT IN ('pg_catalog', 'information_schema') ORDER BY n.nspname, c.relname;
2. information_schema查询
标准信息模式information_schema.tables视图提供了with_oids字段,可直接查询,逻辑和pg_class.relhasoids完全一致,参考查询语句:
SELECT table_schema, table_name FROM information_schema.tables WHERE with_oids = 'YES' AND table_schema NOT IN ('pg_catalog', 'information_schema') ORDER BY table_schema, table_name;
提示:你可以在升级前对所有查询到的表执行
ALTER TABLE <表名> SET WITHOUT OIDS提前移除OID,避免升级到不支持OID的PostgreSQL版本后出现兼容性问题。
内容的提问来源于stack exchange,提问作者Michał Niklas
相关产品推荐
相关产品推荐

