「PostgreSQL」- 管理数据库(=> Chapter 23. Managing Databases)

概览概述(Overview)

部分 角色、数据库、表空间 对象,是在 DB Cluster 级别创建的,保存在 pg_global 中。

对象间的层级关系:Cluster Database Schema Table;(Schema 是个总称,其中包含 Table Function 等等);

当建立连接时,必须指定数据库。

查看数据库:

SELECT datname FROM pg_database;
psql> \l

创建数据库(Creating a Database)

CREATE DATABASE name;
createdb dbname                                                                 # 命令行创建数据库;
createdb                                                                        # 以当前用户名创建数据库;

// 为某个用户创建数据库
// 相应数据库属于当前用户,也用于后期删除操作;
CREATE DATABASE dbname OWNER rolename;
createdb -O rolename dbname 

pg_database 的 datistemplate:暗示数据库是否为模板;否则只有 SuperUser 能够克隆该数据库;
pg_database 的 datallowconn:暗示数据库能否被连接;

模板数据库(Template Databases)

postgres,是最初的数据库,通过 initdb 创建;

template1,也是最初创建的数据库,所有 CREATE DATABASE 将复制该数据库;

template0,也是最初创建的数据库,但是其内容更加简单。需要使用这种类型的数据库:恢复 pg_dump 产生的数据时;template1 包含某些特定设置,而 template 则可以进行所需要的设置;

通过模板创建数据库:

CREATE DATABASE dbname TEMPLATE template0;
createdb -T template0 dbname

数据库配置(Database Configuration)

修改特定数据库的配置:

ALTER DATABASE mydb SET geqo TO off;
ALTER DATABASE dbname RESET varname; # 重置数据库配置

销毁数据库(Destroying a Database)

通过 DROP DATABASE 命令删除数据库;

但是,在登录当前数据库的时候,不能进行该数据库的删除动作;

表空间(Tablespaces)

表空间,其主要用途是来控制数据库文件在文件提供的保存位置的。例如,某些数据库的访问对性能有要求,所以将某些数据库保存在 SSD 磁盘中。

CREATE TABLESPACE fastspace LOCATION '/ssd1/postgresql/data';

CREATE TABLE foo(i int) TABLESPACE space1;