01-PG存储——Cluster和Database

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南風_入弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值