PostgreSQL简单管理(一)

前端之家收集整理的这篇文章主要介绍了PostgreSQL简单管理(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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
Thefilesbelongingtothisdatabasesystemwillbeownedbyuser"postgres".
Thisusermustalsoowntheserverprocess.

Thedatabaseclusterwillbeinitializedwithlocale"en_US.UTF-8".
Thedefaultdatabaseencodinghasaccordinglybeensetto"UTF8".
Thedefaulttextsearchconfigurationwillbesetto"english".

Datapagechecksumsaredisabled.

fixingpermissionsonexistingdirectory/usr/local/pgsql/data...ok
creatingsubdirectories...ok
selectingdefaultmax_connections...100
selectingdefaultshared_buffers...128MB
selectingdynamicsharedmemoryimplementation...posix
creatingconfigurationfiles...ok
runningbootstrapscript...ok
performingpost-bootstrapinitialization...ok
syncingdatatodisk...ok

WARNING:enabling"trust"authenticationforlocalconnections
Youcanchangethisbyeditingpg_hba.conforusingtheoption-A,or
--auth-localand--auth-host,thenexttimeyouruninitdb.

Success.Youcannowstartthedatabaseserverusing:

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

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

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

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

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

[postgres@rhel7pgsql]$ls-l
total4
drwx------19postgrespostgres4096Mar2316:31data

2、启动数据库服务

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

postgres -D /usr/local/pgsql/data

[postgres@rhel7data]$postgres-D/usr/local/pgsql/data/
LOG:databasesystemwasshutdownat2017-03-2316:31:28CST
LOG:MultiXactmemberwraparoundprotectionsarenowenabled
LOG:databasesystemisreadytoacceptconnections
LOG:autovacuumlauncherstarted

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

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

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

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

pg_ctl start -l logfile

[postgres@rhel7data]$pg_ctl-D/usr/local/pgsql/datastart-llogfile
serverstarting
[postgres@rhel7data]$catlogfile
LOG:databasesystemwasshutdownat2017-03-2316:34:12CST
LOG:MultiXactmemberwraparoundprotectionsarenowenabled
LOG:databasesystemisreadytoacceptconnections
LOG:autovacuumlauncherstarted

上面的命令可以在后台启用数据库服务,并把输出写入到日志文件中。-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@rhel7data]$>logfile
[postgres@rhel7data]$pg_ctlstop-D/usr/local/pgsql/data/
waitingforservertoshutdown....done
serverstopped
[postgres@rhel7data]$catlogfile
LOG:receivedfastshutdownrequest
LOG:abortinganyactivetransactions
LOG:autovacuumlaunchershuttingdown
LOG:shuttingdown
LOG:databasesystemisshutdown

指定用某种方式关闭

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

猜你在找的Postgre SQL相关文章