Postgres 10.15集群中的几个数据库之一已被设置为系统数据库。造成这种情况的机制尚不清楚,但可能是在通过更新
pg_database
表将数据库转换为模板的同时发生的。然而,pg_database
表没有控制数据库是否为系统数据库的设置,并且我找不到任何描述如何设置(或取消设置,这是我真正想做的)系统数据库的文档旗帜。
“系统数据库”的概念对于 PostgreSQL 来说是陌生的,它是 pgAdmin 的一个神器。
PostgreSQL 确实有“模板数据库”的概念,即一个旨在为
CREATE DATABASE
中的模板提供服务的数据库。您可以使用 将数据库转换为模板数据库
ALTER DATABASE some_db IS_TEMPLATE TRUE;
对于这样的数据库,禁止连接也是一个好主意,因为只有在没有其他人连接到它的情况下,您才能使用数据库作为模板:
ALTER DATABASE some_db ALLOW_CONNECTIONS FALSE;
OID <= 16383
的对象设置的
您无法设置或更改此 OID。您可以做的最接近的操作是复制“系统”数据库,将其用作
CREATE DATABASE tmpdb TEMPLATE systemdb;
中的模板,然后重命名旧数据库和新数据库。 CREATE DATABASE
分配一个新的 OID > 16383。