我在使用psql的终端上使用PostgreSQL v9.2.4。什么时候
\d pg_class
或
SELECT * FROM pg_class;
没有oid
列 ......但是,什么时候
SELECT oid FROM pg_class;
oid
在那里(!! ??)。这是一个错误吗?我可以在没有风险的情况下使用oid吗?
注意:
我看到当导航到时,某些东西从9.2变为9.3
http://www.postgresql.org/docs/9.2/static/catalog-pg-class.html
和
http://www.postgresql.org/docs/9.3/static/catalog-pg-class.html
因为oid
只有9.3个文档...所以v9.2.4是一种“过渡”,但我认为还有一种BUG。
答案 0 :(得分:2)
oid
是一个隐藏的系统列。它仅存在于创建的表WITH OIDS
上,并且从未在表列中列出。
一般来说,您应该将oids视为传统的怪癖,这些日子仅供系统目录中的内部使用。不要在用户表中使用它们,也不要创建表WITH OIDS
。
可以在系统表的视图中引用它们,例如:
CREATE VIEW something AS
SELECT oid, relname FROM pg_class;
但一般情况下你不应该这样做。如果需要,您可以写oid, *
,但无论如何在视图中使用*
都不是好习惯。