上QQ阅读APP看书,第一时间看更新
2.4.1 不想把数据库实例创建到“/var/lib/pgsql”目录下
使用yum安装的PostgreSQL数据库实例的数据目录是在“/var/lib/pgsql”目录下,创建的操作系统用户“postgres”默认的HOME目录也不在“/home”目录下,上述配置对于生产中使用的数据库来说不是很合适。如果想自己定制这些内容,我们可以手动创建数据库实例,而不使用“/usr/pgsql-12/bin/postgresql-12-setup initdb”方法来创建数据库实例。
首先把自动创建的postgres用户删除,命令如下:
userdel -r postgres
然后把用户postgres的HOME目录建在“/home”目录下:
groupadd -g 701 postgres useradd -g 701 -u 701 -s /bin/bash -m postgres
接着配置postgres用户的.bashrc内容,命令如下:
export PATH=/usr/pgsql-12/bin:$PATH export LD_LIBRARY_PATH=/usr/pgsql-12/lib:$LD_LIBRARY_PATH export PGDATA=/home/postgres/pgdata export PGHOST=/tmp
上面PGDATA环境变量指定的数据库是“/home/postgres/pgdata”,用户可以将其修改成实际的目录。
然后重新登录postgres用户,执行initdb命令以初始化数据库:
[root@pg01 ~]# su - postgres Last login: Tue Feb 11 14:47:52 CST 2020 on pts/0 [postgres@pg01 ~]$ initdb The files belonging to this database system will be owned by user "postgres". This user must also own the server process. ... ... ... pg_ctl -D /home/postgres/pgdata -l logfile start
我们在/home/postgres/pgdata/postgresql.conf文件的最后增加以下命令行:
unix_socket_directories = '/tmp'
这是因为我们新建的操作系统用户postgres对“/var/run/postgresql”目录没有写权限,而官方发布的二进制版本的PostgreSQL软件的unix_socket_directories默认在目录“/var/run/postgresql”下。前面我们配置环境变量“export PGHOST=/tmp”也是出于这个原因。如果不进行修改,我们将无法启动数据库。
然后我们使用pg_ctl命令启动数据库:
[postgres@pg01 ~]$ pg_ctl start waiting for server to start....2019-12-11 15:00:28.164 CST [1739] LOG: starting PostgreSQL 12.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit 2019-12-11 15:00:28.166 CST [1739] LOG: listening on IPv6 address "::1", port 5432 2019-12-11 15:00:28.166 CST [1739] LOG: listening on IPv4 address "127.0.0.1", port 5432 2019-12-11 15:00:28.173 CST [1739] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" 2019-12-11 15:00:28.194 CST [1739] LOG: redirecting log output to logging collector process 2019-12-11 15:00:28.194 CST [1739] HINT: Future log output will appear in directory "log". done server started
pg_ctl是一个管理PostgreSQL数据库的服务工具,可以用该工具启停数据库,如可用如下命令停止数据库:
pg_ctl stop