You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:45:03