

在PostgreSQL中,创建数据库时实际上通过拷贝一个已有数据库进行工作的。在默认情况下,将拷贝名为template1的标准系统数据库。所以该数据库是创建新数据库的“模板”。如果为template1数据库增加对象,这些对象将被拷贝到后续创建的用户数据库中。这种行为允许对数据库中标准对象集合的进行修改。例如,如果把过程语言PL/Perl安装到template1中,那么在创建用户数据库后不需要额外的操作就可以使用该语言。
视频讲解如下:
系统里还有名为template0的第二个标准系统数据库。这个数据库包含和template1初始内容一样的数据,但只包含PostgreSQL版本预定义的标准对象。在数据库集群被初始化之后,不应该对template0做任何修改。在创建数据库时通过指示使用template0取代template1进行拷贝,可以创建一个“纯净的”用户数据库,它不会包含任何template1中的站点本地附加物。
执行下面的语句可以查看当前已存在的数据库信息。
postgres=# select oid,datname,datistemplate,datallowconn
from pg_database;
# 输出的信息如下:
oid | datname | datistemplate | datallowconn
-------+-----------+---------------+--------------
13580 | postgres | f | t
1 | template1 | t | t
13579 | template0 | t | f
(4 rows)其中有两个有用的标识:
template0通常被标记为datallowconn = false来阻止对它的修改。template0和template1通常总是被标记为datistemplate = true。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。