Determining the OID of a table in Postgres 9.1?
有谁知道如何在Postgres 9.1中找到表的OID? 我正在编写一个更新脚本,需要在尝试创建列之前测试表中是否存在列。 这是为了防止脚本在第一次出错后运行。
要获取表OID,请转换为对象标识符类型
1 | SELECT 'mytbl'::regclass::oid; |
这将找到沿
模式限定表名以删除对搜索路径的依赖:
1 | SELECT 'myschema.mytbl'::regclass::oid; |
在Postgres 9.4或更高版本中,您还可以使用
- 如何检查给定模式中是否存在表
然后,您只需要查询目录表
1 2 3 4 5 6 | SELECT TRUE AS col_exists FROM pg_attribute WHERE attrelid = 'myschema.mytbl'::regclass AND attname = 'mycol' AND NOT attisdropped -- no dropped (dead) columns -- AND attnum > 0 -- no system columns (you may or may not want this) |
postgres目录表
目录表位于
您可能还对
请参阅:http://www.postgresql.org/docs/current/static/catalog-pg-class.html和http://www.postgresql.org/docs/current/static/catalog-pg-attribute.html
只是为了完成我想要添加的可能性,存在一种删除列的语法,以便不会出错:
ALTER TABLE mytbl
DROP COLUMN如果存在mycol
见http://www.postgresql.org/docs/9.0/static/sql-altertable.html
然后,您可以安全地添加列。
1 | SELECT oid FROM pg_class WHERE relname = 'tbl_name' AND relkind = 'r'; |