阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

PostgreSQL简单管理

130次阅读
没有评论

共计 4923 个字符,预计需要花费 13 分钟才能阅读完成。

1、初始化数据库集群

和其他 RDBMS 一样,在开始使用 PostgreSQL 数据库之前需要在磁盘上初始化一个数据库,这里称为数据库集群。数据库集群是一个运行着的数据库服务实例管理的数据库的集合。初始化完后,集群中包含一个名为 postgres 的数据库,作为默认的数据库。还会创建另一个叫作 template1 的数据库,它被用作后续创建数据库的一个模版。

在文件系统层面,一个数据库集群是一个存储所有数据的目录 (data directory)。它取决于你选择在哪存储你的数据。默认的目录是 /usr/local/pgsql/data 或 /var/lib/pgsql/data。

使用 iniddb 命令初始化数据库集群,使用 - D 参数指定数据库的路径。示例如下:

initdb -D /usr/local/pgsql/data

[postgres@rhel7 ~]$ initdb -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user “postgres”.
This user must also own the server process.
 
The database cluster will be initialized with locale “en_US.UTF-8”.
The default database encoding has accordingly been set to “UTF8”.
The default text search configuration will be set to “english”.
 
Data page checksums are disabled.
 
fixing permissions on existing directory /usr/local/pgsql/data … ok
creating subdirectories … ok
selecting default max_connections … 100
selecting default shared_buffers … 128MB
selecting dynamic shared memory implementation … posix
creating configuration files … ok
running bootstrap script … ok
performing post-bootstrap initialization … ok
syncing data to disk … ok
 
WARNING: enabling “trust” authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
–auth-local and –auth-host, the next time you run initdb.
 
Success. You can now start the database server using:
 
    pg_ctl -D /usr/local/pgsql/data -l logfile start

可以指定环境变量 PGDATA 指向 PostgreSQL 的目录。

还可以调用 pg_ctl 命令来初始化数据库集群:

pg_ctl -D /usr/local/pgsql/data initdb

指定的目录必须为空,否则则无法初始化。初始化后整个目录的权限变为 700(drwx——)。

[postgres@rhel7 pgsql]$ ls -l
total 4
drwx—— 19 postgres postgres 4096 Mar 23 16:31 data

2、启动数据库服务

数据库服务程序叫作 postgres。启动数据库时必须指定数据目录。简单的一个示例:

postgres -D /usr/local/pgsql/data

[postgres@rhel7 data]$ postgres -D /usr/local/pgsql/data/
LOG:  database system was shut down at 2017-03-23 16:31:28 CST
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

如果不指定 - D 参数,命令会去找 PGDATA 环境变量,如果两个都没有则启动报错。

上面的命令是在前台启动数据库服务,不过最好在后台启动。后台启动的例子:

postgres -D /usr/local/pgsql/data > logfile 2>&1 &

另一个封装好的命令 pg_ctl 也可以提供相应的功能。如下例:

pg_ctl start -l logfile

[postgres@rhel7 data]$ pg_ctl -D /usr/local/pgsql/data start -l logfile
server starting
[postgres@rhel7 data]$ cat logfile 
LOG:  database system was shut down at 2017-03-23 16:34:12 CST
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

上面的命令可以在后台启用数据库服务,并把输出写入到日志文件中。- D 参数同样用于指定数据目录。pg_ctl 还可以用于停止数据库服务。

服务启动后,对应的 PID 被记录在数据目录的 postmaster.pid 文件中。防止启动多次,也可以用来关闭服务。

3、关闭数据库服务

关闭 PostgreSQL 数据库有多种模式。主要有如下几种:

SIGTERM

Smart Shutdown 模式。数据库接到 SIGTERM 后,服务端不允许新的连接,但已连接的会话继续工作直到会话完成。当所有会话完成后才关闭数据库。如果数据库在热备状态,会等备份完成。如果在恢复状态则等所有进程终止。

SIGINT

Fast Shutdown 模式。服务端不允许新的连接,并且给所有已存在的服务进程发送 SIGTERM,使它们终止当前的事务并立即退出。所有服务进程退出后数据库关闭。

SIGQUIT

Immediate Shutdown 模式。服务端发送 SIGQUIT 给所有的子进程,并等待它们终止,如果 5 秒钟后没有终止,这些进行被 SIGKILL。等所有子进程停止后,主服务进程退出。它不做正常的关闭进程,下次启动时会启动恢复。建议仅在紧急情况下使用。

pg_ctl 提供关闭数据库的方式:

pg_ctl stop #默认 fast 模式关闭

[postgres@rhel7 data]$ > logfile 
[postgres@rhel7 data]$ pg_ctl stop -D /usr/local/pgsql/data/
waiting for server to shut down…. done
server stopped
[postgres@rhel7 data]$ cat logfile 
LOG:  received fast shutdown request
LOG:  aborting any active transactions
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down

指定用某种方式关闭:

pg_ctl stop -m smart/fast/immediate

还可以直接 kill 进程号的方式,进程号在数据目录的 postmaster.pid 文件中

kill -INT‘head -1 /usr/local/pgsql/data/postmaster.pid‘

4、服务端配置

参数配置文件在数据目录中的 postgresql.conf

查看当前的配置

使用 show 命令

show all/paramter_name;

使用函数

select current_setting(‘paramter_name’);

4.1、修改参数

4.1.1 使用 SQL 语句修改参数

ALTER SYSTEM  #修改系统级相当于修改 psotgresql.conf,改后的参数记录在 postgresql.auto.conf 文件中

ALTER DATABASE #修改数据库级

ALTER ROLE    #修改 ROLE 级

直接修改 postgresql.conf 文件,需要 pg_ctl reload 或执行 select pg_reload_conf(); 把配置重新读入系统;

另外,还有一个系统视图 pg_settings 可以用来查看及修改 session 级别的参数。

SET configuration_parameter TO DEFAULT;

UPDATE pg_settings SET setting = reset_val WHERE name =’configuration_parameter’;

上面两个语句是等价的。

4.1.2 在命令行中指定参数

在启动数据库时,通过 postgres 命令使用 - c 添加指定参数

postgres -c log_connections=yes -c log_destination=’syslog’

这种方式指定的参数除非重启数据库,否则 ALTER SYSTEM 命令也不能修改。指定的参数信息记录在 postmaster.opts 文件中。

在启动 session 时,可以通过设置环境变量 PGOPTIONS,来设置 session 中参数的值

env PGOPTIONS=”-c geqo=off -c statement_timeout=5min” psql

4.1.3 引用其他参数文件

参数文件 postgresql.conf 可以引用其他参数文件,可以嵌套引用。可以由以下参数参数指定:

include=’special.conf’  #直接指定文件,与 postgresql.conf 不在同一目录下需要指定绝对路径,如果文件不存在,则启动报错。

include_if_exists=’exists.conf’ #用法同 include,但如果文件不存在则忽略该参数

include_dir=’conf_dir’  #引用指定目录下所有的后缀为.conf 的文件。

参考:https://www.postgresql.org/docs/9.6/static/server-start.html

Ubuntu 16.04 下安装 PostgreSQL 和 phpPgAdmin  http://www.linuxidc.com/Linux/2016-08/134260.htm

Linux 下 RPM 包方式安装 PostgreSQL  http://www.linuxidc.com/Linux/2016-03/128906.htm

Linux 下安装 PostgreSQL  http://www.linuxidc.com/Linux/2016-12/138765.htm

Linux 下 PostgreSQL 安装部署指南  http://www.linuxidc.com/Linux/2016-11/137603.htm

Linux 下安装 PostgreSQL 并设置基本参数  http://www.linuxidc.com/Linux/2016-11/137324.htm

Fedota 24 将数据库升级到 PostgreSQL 9.5  http://www.linuxidc.com/Linux/2016-11/137374.htm

CentOS 6.5 下 PostgreSQL 服务部署  http://www.linuxidc.com/Linux/2017-01/139144.htm

MongoDB 的详细介绍 :请点这里
MongoDB 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-03/142167.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4923字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中