PostgreSQL:为什么架构所有者不是数据库所有者

Yor*_*Wid 5 postgresql

我有一个简单的问题,但我无法从官方文档中找到答案。当我以特定用户的身份在 PostgreSQL 中创建数据库时,我是该数据库下除架构之外的所有对象的所有者。是否有理由默认 postgres 角色是架构所有者?我想不出对此设置的任何解释。只是好奇 ...

Cra*_*ger 6

通过克隆现有数据库来创建新数据库。如果您没有指定要克隆哪一个,PostgreSQL 会克隆默认隐藏的数据库template1。中的所有对象template1都归用户所有postgres

因此,在从或克隆数据库时,您不是数据库中任何对象的所有者;您只拥有数据库本身。template0template1

新对象是由您创建的,因为它们是您创建的。现有对象保留其现有所有权。

\dn *psql看到的命名空间定义,\dp *.*看看表/视图/序列的权限,\df+ *看到与业主函数定义,\dT *看到的数据类型,等等。你会看到,在一个新的空白DB他们全部由用户所拥有postgres

  • @YorickdeWid我发现模板不太适合源代码控制和备份流程,它们是“额外的魔法”,迟早会丢失。当 Joe 决定他想要默认安装“hstore”而 Jenny 决定她想要“intarray”时,它们也倾向于收集垃圾;当在不同时间从模板复制数据库时,这会增加偏差。我非常喜欢使用配置管理来生成模式 - 像 Liquibase 这样的东西真的很好。 (2认同)