繁体   English   中英

插入具有指定 OID 的 Postgres 系统表

[英]Insert to Postgres system table with specified OID

以下是填充系统表的一种方法:

create pg_proc 1255 bootstrap rowtype_oid 81
 (
 proname = name ,
 pronamespace = oid ,
...
insert OID = 1242 ( boolin 11 10 12 1 0 0 0 f f f t f i s 1 0 16 2275 _null_ _null_ _null_ _null_ _null_ boolin _null_ _null_ _null_ )

有没有人知道允许我为 OID 列指定值的语法? 当在升级方案中使用稍后版本中的功能使用的行填充系统表时,这将非常有用。

谢谢

您引用的代码是BKI代码,只能在集群初始化期间从 C 函数中执行。 这旨在仅在initdb期间运行,我认为稍后尝试在BootstrapProcessing模式下使用自定义后端进程修改现有目录表中的数据是不安全的。

您可以安全地编写此类代码的唯一地方是,如果您扩展 PostgreSQL 并希望在initdb期间添加您自己的目录条目。

您没有说明为什么要这样做,但很可能您正在以错误的方式解决问题,特别是如果您想写入具有对象 ID ≥ FirstNormalObjectId PostgreSQL 中任何依赖于具有固定对象 ID 的某些对象的东西都在做错误的事情(除非这些是由initdb创建的系统对象)。

尽管如此,从 PostgreSQL v12 开始, oid列不再是一个特殊的系统列,因此您可以修改系统目录并使用普通 DML 语句添加具有特定oid条目。 这样做仍然不是一个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM