在安装完pg,初始化完成后,默认会创建三个数据库,template0、template1、postgres。
- template0 模板数据库,用于从逻辑备份中恢复或创建不同编码的数据库,任何时候都不应该修改此数据库内容。
- template1 用户模板数据库,用户创建的数据库继承自此数据库。如果想让自建的数据库默认有某个对象,可以在此数据库中创建对象,自建数据库就会继承创建的对象。
- postgres 默认的管理数据库,数据字典存放于此数据库中。
mydb=# \l+
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description
-----------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
mydb | myq | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8745 kB | pg_default |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8561 kB | pg_default | default administrative connection database
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 8385 kB | pg_default | unmodifiable empty database
| | | | | postgres=CTc/postgres | | |
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 8385 kB | pg_default | default template for new databases
| | | | | postgres=CTc/postgres | | |
(4 rows)
在创建数据库时可以指定使用哪个数据库模板,也可以指定当前创建的数据库是否可以作为模板。
创建一个数据库db1,以template1作为模板,并设置此数据库可以做为其它数据的模板。
mydb=# create database db1 template template1 IS_TEMPLATE true;
CREATE DATABASE
#在db1中创建一个表t,并插入一行数据。
mydb=# \c db1
You are now connected to database "db1" as user "myq".
db1=# create table t(name varchar(10));
CREATE TABLE
db1=# insert into t values('alice');
INSERT 0 1
db1=# select * from t;
name
-------
alice
(1 row)
创建数据库db2,以db1为模板
db1=# create database db2 template db1;
CREATE DATABASE
db1=# \c db2
You are now connected to database "db2" as user "myq".
db2=# \dt+
List of relations
Schema | Name | Type | Owner | Persistence | Access method | Size | Description
--------+------+-------+-------+-------------+---------------+------------+-------------
public | t | table | myq | permanent | heap | 8192 bytes |
(1 row)
db2=# select * from t;
name
-------
alice
(1 row)
db2继承了db1中的对象表t。继承并非链接,而是完整的拷贝。可以删除db1中的表t,看下db2中的表t还是否存在。
db2=# \c db1
You are now connected to database "db1" as user "myq".
db1=# drop table t;
DROP TABLE
db1=# \c db2
You are now connected to database "db2" as user "myq".
db2=# \dt+
List of relations
Schema | Name | Type | Owner | Persistence | Access method | Size | Description
--------+------+-------+-------+-------------+---------------+------------+-------------
public | t | table | myq | permanent | heap | 8192 bytes |
(1 row)
db2=# select * from t;
name
-------
alice
(1 row)
可以看到db1中的t表删除了db2中的t表任然存在,说明两个t表不存在关联。
模板数据库删除
模板数据库没办法直接删除,删除会报错,要删除先要取消数据库的模板属性
mydb=# drop database db1;
ERROR: cannot drop a template database
mydb=# alter database db1 is_template false;
ALTER DATABASE
mydb=# drop database db1;
DROP DATABASE
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




