使用Ubuntu操作系统和PostgreSQL的时候,在除postgres用户之外的用户下创建并启动数据库集群
关于这篇文章
由于在Ubuntu环境下创建PostgreSQL集群(≒实例)时遇到了问题,我想记录下解决方法。
集群是用来区分数据库的单位。考虑到本次情况需要在一台服务器上同时启动多个服务,因此我想将PostgreSQL按照每个服务划分为不同的集群,以便使用数据库。
目标读者
-
- PostgreSQLでクラスタ分けしてデータベース管理を行いたい方
- サーバOSにUbuntu、データベースにPostgreSQLを使用している方
环境
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
$ psql --version
psql (PostgreSQL) 12.11 (Ubuntu 12.11-0ubuntu0.20.04.1)
安装
参考Ubuntu 20.04快速入门中的步骤,安装PostgreSQL到Ubuntu系统。
$ sudo apt install postgresql postgresql-contrib
创建集群
由于在Ubuntu上无法使用initdb命令,我们可以参考Ubuntu特定的PostgreSQL命令,在pg_createcluster命令中创建PostgreSQL集群。
-p 参数是指定集群要使用的端口(默认为5432,在创建多个集群时,依次分配5432、5433、5434等)。
sudo pg_createcluster 12 sample_cluster -p 6000 -u クラスタの管理者となるユーザ -g クラスタの管理者となるユーザの主グループ
启动集群
$ sudo systemctl start postgresql@12-sample_cluster
可以通过以下命令确认集群是否已在6000端口上启动(在线):
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
12 sample_cluster 6000 online クラスタの管理者となるユーザ /var/lib/postgresql/12/sample_cluster /var/log/postgresql/postgresql-12-sample_cluster.log
登录到启动的集群。
在这里遇到了困难,但要登录到上面创建的集群内部,需要在psql命令中加入 -h /tmp 选项。
根据资料編,Ubuntu特有的PostgreSQL命令中也有提到,如果将除了postgres用户以外的其他用户指定为集群管理员,则需要将 /tmp 目录作为主机名指定。
为了本地连接,可以明确设置postmaster(1)服务器存储Unix套接字的目录。默认情况下,对于由postgres用户拥有的集群,目录为/var/run/postgresql/,对于由其他用户拥有的数据库,目录为/tmp。
$ sudo -i -u クラスタの管理者となっているユーザ
$ psql -h /tmp -p 6000 -d 使用するデータベース名 -f 実行したいSQLファイルのパス
只需要一个选择:
在执行psql命令后以「集群管理员」身份登录到PostgreSQL并成功进入集群即可完成。
请参考
如何在Ubuntu 20.04上安装PostgreSQL [快速入门]
文档部分:用于Ubuntu特定的PostgreSQL命令