1.Cluster
Cluster意为数据库集簇,这个和Oracle的集群概念是完全不一样的,一般我们在执行initdb后,会在PGDATA环境变量指定的目录下生成一系列的目录和文件,这些文件保证PostgreSQL实例能正常启动和运行,我们成这些文件的集合为数据库集簇。
下面我们初始化一个cluster
[pg14@node1 ~]$ echo $PGDATA
/pgdata02
[pg14@node1 ~]$ initdb -D $PGDATA -k -U postgres -W
[pg14@node1 ~]$ ll /pgdata02
total 56
drwx------ 5 pg14 pg14 41 Aug 19 03:52 base
drwx------ 2 pg14 pg14 4096 Aug 19 03:52 global
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_commit_ts
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_dynshmem
-rw------- 1 pg14 pg14 4789 Aug 19 03:52 pg_hba.conf
-rw------- 1 pg14 pg14 1636 Aug 19 03:52 pg_ident.conf
drwx------ 4 pg14 pg14 68 Aug 19 03:52 pg_logical
drwx------ 4 pg14 pg14 36 Aug 19 03:52 pg_multixact
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_notify
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_replslot
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_serial
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_snapshots
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_stat
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_stat_tmp
drwx------ 2 pg14 pg14 18 Aug 19 03:52 pg_subtrans
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_tblspc
drwx------ 2 pg14 pg14 6 Aug 19 03:52 pg_twophase
-rw------- 1 pg14 pg14 3 Aug 19 03:52 PG_VERSION
drwx------ 3 pg14 pg14 60 Aug 19 03:52 pg_wal
drwx------ 2 pg14 pg14 18 Aug 19 03:52 pg_xact
-rw------- 1 pg14 pg14 88 Aug 19 03:52 postgresql.auto.conf
-rw------- 1 pg14 pg14 28753 Aug 19 03:52 postgresql.conf
2.Cluster 目录说明
- base和global目录
数据库集簇初始化后,会创建两个表空间pg_default和pg_global,这两个表空间分别对应base和global目录。pg_default为默认表空间,初始化集簇后,如果没有特殊指定,我们创建的数据库和表等对象皆存放至此;pg_global为全局表空间,她存放全集簇通用的数据字典(catalog)。
postgres=# \db+
List of tablespaces
Name | Owner | Location | Access privileges | Options | Size | Description
------------+----------+----------+-------------------+---------+--------+-------------
pg_default | postgres | | | | 25 MB |
pg_global | postgres | | | | 560 kB |
- pg_commit_ts:包含事务提交时间戳数据的目录
- pg_dynshmem:包含动态共享内存子系统使用的文件的目录
- pg_hba.conf:数据库连接认证配置文件
- pg_ident.conf:该文件控制PostgreSQL用户名映射。它将外部用户名映射到对应的PostgreSQL用户名。
- pg_logical:包含用于逻辑解码的状态数据的目录
- pg_multixact:包含多事务状态数据(用于共享行锁)的目录
- pg_notify:包含LISTEN/NOTIFY状态数据的目录
- pg_replslot:包含复制槽数据的目录
- pg_serial:串行事务提交信息的数据目录
- pg_snapshots:导出快照数据目录
- pg_stat:统计信息子系统的永久文件目录
- pg_stat_tmp:统计信息子系统的临时文件目录
- pg_subtrans:子事务状态数据
- pg_tblspc:非默认表空间的连接目录
- pg_twophase:于预备事务状态文件的目录
- PG_VERSION:包含PostgreSQL主版本号的文件
[root@node1 pgdata02]# more PG_VERSION
14
- pg_wal: WAL (预写日志)文件的目录
- pg_xact:事务提交状态数据的目录
- postgresql.auto.conf:用于存储由
ALTER SYSTEM
设置的配置参数的文件 - postgresql.conf:记录数据库配置参数的文件
- postmaster.opts:记录服务器最后一次启动时使用的命令行参数的文件
- postmaster.pid:一个锁文件,记录着当前的 postmaster 进程ID(PID)、集簇数据目录路径、postmaster启动时间戳、端口号、Unix域套接字目录路径(Windows上为空)、第一个可用的listen_address(IP地址或者
*
,或者为空表示不在TCP上监听)以及共享内存段ID(服务器关闭后该文件不存在)
3.Database
一个Cluster内可以包含多个Database,其概念类似Oracle中的PDB,多个Database互相隔离,不能在实例内跨库访问。一个数据库下可以包含多个Schema,不同Schema下管理多个表。
在初始化集簇后,会默认创建三个数据库,两个模板数据库template0和template1,一个系统数据库postgres。
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
- template0用于从逻辑备份中恢复数据,或创建一个不同编码的数据库,不可被更改。
- template1 被当做模板,其他数据库创建都按此模板创建。
- postgres 是一个常规数据库
#创建数据库
可以使用服务器命令createdb
createdb test -Upostgres
也可以做psql内创建
postgres=# \help create database
Command: CREATE DATABASE
Description: create a new database
Syntax:
CREATE DATABASE name
[ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LOCALE [=] locale ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ]
#删除数据库
dropdb test -Upostgres
postgres=# \help drop database
Command: DROP DATABASE
Description: remove a database
Syntax:
DROP DATABASE [ IF EXISTS ] name [ [ WITH ] ( option [, ...] ) ]
where option can be:
FORCE