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 即输出目录和迁移到的目录相同,数据文件夹迁移完成。