李守中

PostgreSQL 配置笔记

Table of Contents

1 开放远程连接权限

第一步,修改 postgresql.conf,如果编译安装,则在 usr/local/pgsql 目录下找。

如果从 Debian / Ubuntu 的 apt 仓库安装则 sudo vim +59 /etc/postgresql/11/main/postgresql.conf ( 命令里的 11 代表版本号,也是文件夹名称 )。

如果用 RedHat 系发行版 sudo vim +59 /var/lib/pgsql/data/postgresql.conf

部分内容如下:

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'    # what IP address(es) to listen on;
                          # comma-separated list of addresses;
                          # defaults to 'localhost'; use '*' for all
                          # (change requires restart)
port = 5432               # (change requires restart)
max_connections = 100     # (change requires restart)
#superuser_reserved_connections = 3                 # (change requires restart)
unix_socket_directories = '/var/run/postgresql'     # comma-separated list of directories
                                                    # (change requires restart)
#unix_socket_group = ''           # (change requires restart)
#unix_socket_permissions = 0777   # begin with 0 to use octal notation
                                  # (change requires restart)
#bonjour = off                    # advertise server via Bonjour
                                  # (change requires restart)
#bonjour_name = ''                # defaults to the computer name
                                  # (change requires restart)

listen_addresses = 'localhost' 表示仅允许本机连接到数据库,将其改成 listen_addresses = '*' 表示允许任何用户连接到数据库。

第二步,修改 pg_hba.conf。文件位于 postgresql.conf 所在的同级目录下。

Debian / Ubuntu: sudo vim + /etc/postgresql/11/main/pg_hba.conf 或者在 root 用户下 echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/11/main/pg_hba.conf

RadHat: sudo vim + /var/lib/pgsql/data/pg_hba.conf 手动修改,或者在 root 用户下 echo "host all all 0.0.0.0/0 md5" >> /var/lib/pgsql/data/pg_hba.conf

部分内容如下:

# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

在最后加上:

# TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

sudo systemctl restart postgresql 至此,开放连接权限完成。

注: 安装完成以后,数据库默认用户 postgres 没有密码,所以无法使用密码远程连接 。需要切到 postgres 用户下 su postgres 改密码之后执行 psql 启动 postgresql 终端,然后执行 \password postgres 更改数据库用户的密码,之后才能用密码远程连接数据库。

2 数据文件迁移

2.1 debian 系

第一步,检查数据库数据文件位置。 su postgres psql 切换到数据库用户并进入数据库命令行,命令 SHOW data_directory; 的输出即为数据文件位置。

第二步,迁移数据文件。 sudo systemctl stop postgresql 停止数据库。 sudo apt install -y rsync 安装文件夹同步软件。 sudo rsync -av /var/lib/postgresql/11 /mnt/intelS3710/pgsql 复制数据 ( -a 表示移动时不更改权限, -v 表示显示移动过程 )。 sudo mv /var/lib/postgresql/11 /var/lib/postgresql/11.bak 将原文件保留。

第三步,修改配置文件。 sudo vim +41 /etc/postgresql/11/main/postgresql.conf 编辑配置文件,找到数据目录配置的位置:

data_directory = '/var/lib/postgresql/11/main'

把目录改成:

data_directory = '/mnt/intelS3710/pgsql/11/main'

第四步, sudo systemctl restart postgresql 重启数据库。 su postgres psql 进入数据库命令行, SHOW data_directory; 查看当前数据库文件位置。

若输出显示为 /mnt/intelS3710/pgsql/11/main 即输出目录和迁移到的目录相同,数据文件夹迁移完成。

2.2 RedHat 系

第一步,检查数据库数据文件位置。 su postgres psql 切换到数据库用户并进入数据库命令行,命令 SHOW data_directory; 的输出即为数据文件位置。输出应为 /var/lib/pgsql/data。

第二步,迁移数据文件。 sudo systemctl stop postgresql 停止数据库。 sudo apt install -y rsync 安装文件夹同步软件。 sudo rsync -av /var/lib/pgsql /mnt/intelS3710 复制数据 ( -a 表示移动时不更改权限, -v 表示显示移动过程 )。

/var/lib/pgsql 是数据库用户 postgres 的家目录,所以如果没有把数据库放在这,这个目录下基本不做修改。

如果之前把数据库初始化在了用户家目录下,需要 sudo mv /var/lib/pgsql/data /var/lib/pgsql/data.bak && sudo mv /var/lib/pgsql/initdb_postgresql.log /var/lib/pgsql/initdb_postgresql.log.bak 备份数据库文件夹或者 sudo rm -rf /var/lib/pgsql/data && sudo rm -rf /var/lib/pgsql/initdb_postgresql.log 直接删除数据库文件夹。

第三步,修改配置文件。 sudo vim +29 /usr/lib/systemd/system/postgresql.service 找到下面这行:

Environment=PGDATA=/var/lib/pgsql/data

把路径改成:

Environment=PGDATA=/mnt/intelS3710/pgsql/data

第四步, systemctl daemon-reload 重新加载 service 文件。 sudo systemctl restart postgresql 重启数据库。 su postgres psql 进入数据库命令行, SHOW data_directory; 查看当前数据库文件位置。

若输出显示为 /mnt/intelS3710/pgsql/data 即输出目录和迁移到的目录相同,数据文件夹迁移完成。



Last Update: 2023-05-18 Thu 08:58

Contact: [email protected]     Generated by: Emacs 27.1 (Org mode 9.3)

若正文中无特殊说明,本站内容遵循: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议