Postgresql Postgreoids会随着时间而变化吗?

Postgresql Postgreoids会随着时间而变化吗?,postgresql,Postgresql,上下文 我正在创建一个服务,用户可以在其中管理自己的数据库表 我找到了两种参考表格的方法: 名称:table_schema,来自information_schema.tables的table_名称 OID:从pg_类中删除 列的情况相同: 名称:信息中的表\u架构、表\u名称、列\u名称。\u schema.columns attnum:attrelid,来自pg_属性的attnum 我不想直接使用这个名字,因为它可以随着时间的推移而改变,也可以重命名 问题: 使用这些数字作为参考是否安全 我在

上下文

我正在创建一个服务,用户可以在其中管理自己的数据库表

我找到了两种参考表格的方法:

名称:table_schema,来自information_schema.tables的table_名称 OID:从pg_类中删除 列的情况相同:

名称:信息中的表\u架构、表\u名称、列\u名称。\u schema.columns attnum:attrelid,来自pg_属性的attnum 我不想直接使用这个名字,因为它可以随着时间的推移而改变,也可以重命名

问题:

使用这些数字作为参考是否安全


我在

中几乎没有发现有用的信息。不,OID不会改变。如果删除并重新创建一个对象,它们将不同,因为这将被视为一个新对象,否则它们将保持原样。这同样适用于columns属性,其中attnum将保持不变,除非删除并重新创建该列。attnum值永远不会对同一个表重复使用。

将oid用作表的永久引用不是一个好主意

虽然oid在数据库的生命周期内从未更改,但在从PGU转储恢复后,它将有所不同


此外,一次主要升级,无论是转储/还原还是pg_升级,都会改变OID。

有用的信息就在开头,对象标识符OID由PostgreSQL内部用作各种系统表的主键。用-E启动psql,您将得到Postgres使用的内部查询。您将看到OID被广泛使用。是的,它们使用起来是安全的。数据库的转储和恢复可以而且可能会改变OID