我们已经初步配置好了pg,并在root账户下,使用postgres这个账户在本地登录了pg数据库。

下面我们配置远程登录。

之前先解决一个psql命令别名的问题。

一、【准备工作1】postgreSQL 11后环境变量配置

  • 在/etc/profile.d/目录下创建一个postgres.sh文件
  • vi /etc/profile.d/postgres.sh
  • 输入以下

export PGHOME=/usr/pgsql-11

export PGDATA=/var/lib/pgsql/11/data/

export PATH=$PGHOME/bin:$PATH

  • 重启服务器

二、【准备工作2】CentOS7.4 alias别名配置

  • cd ~
  • ls -a 找到.bashrc文件
  • vi .bashrc
  • 添加

alias psql=/usr/pgsql-11/bin/psql




plsql怎么连接sql server plsql连接pg_数据库


  • 使命令生效

source .bash_profile

这样就可以随时使用psql命令了

三、查看数据库信息

查看数据版本

pg_config --version

四、创建数据库

  1. 创建数据库用户
  • 数据库超级管理员登录
  • su postgres
  • 创建用户

postgres=# create user username with password '****'; CREATE ROLE postgres=#

需要注意:

  1)要以英文分号结尾

  2)密码需要引号包裹


plsql怎么连接sql server plsql连接pg_sql_02


  • 这里新增了一个testadm用户,但并没有用户权限(即没有赋予角色)

2.创建数据库

  • postgres=# create database dbtest owner username; -- 创建数据库指定所属者 CREATE DATABASE postgres=#


plsql怎么连接sql server plsql连接pg_postgresql 远程用户_03


  • 此处创建了一个testdb数据库,并指定所属者是testadm

3.将数据库得权限,全部赋给某个用户

  • postgres=# grant all on database dbtest to username; -- 将dbtest所有权限赋值给username GRANT postgres=#


plsql怎么连接sql server plsql连接pg_数据库_04


  • 此时,有了一个真正的数据库(testdb)存在,这个数据库也有一个用户testadm

五、配置远程登录PG

【注意】PostgreSQL安装完成后是不能从本机之外的机器连接的

1.退出postgres用户

  • 输入q 退出postgres用户,显示如下


plsql怎么连接sql server plsql连接pg_sql_05


2.尝试用新用户登录testdb数据库

  • 输入

psql -U testadm -h localhost testdb

【报错】


plsql怎么连接sql server plsql连接pg_数据库_06


  • 这个报错和IPv6有关。

3.配置pg_hba.conf文件

  • vi /var/lib/pgsql/11/data/pg_hba.conf
  • 去掉IPv6连接的注释(这里比较奇怪)


plsql怎么连接sql server plsql连接pg_plsql怎么连接sql server_07


  • 重启服务
  • systemctl restart postgresql-11
  • 再次输入如下,连接数据库

psql -U testadm -h localhost testdb

【报错】如下:


plsql怎么连接sql server plsql连接pg_plsql怎么连接sql server_08


  • 这个报错是和认证方式有关的,之前分析过的,默认是ident认证。但我们并没有配置ident认证。

4.【测试1】再次pg_hba.conf文件

  • vi /var/lib/pgsql/11/data/pg_hba.conf
  • 把IPv6这行配置改成md5认证,如下图


plsql怎么连接sql server plsql连接pg_sql_09


  • 重启服务
  • systemctl restart postgresql-11
  • 再次输入如下,连接数据库

psql -U testadm -h localhost testdb

  • 登录成功


plsql怎么连接sql server plsql连接pg_plsql怎么连接sql server_10


  • 这里有点邪门,这意味着是以IPv6地址登录

5.【测试2】再次pg_hba.conf文件

  • vi /var/lib/pgsql/11/data/pg_hba.conf
  • 把IPv4这行配置改成md5认证,IPv6认证这行仍然是ident试试,如下图


plsql怎么连接sql server plsql连接pg_plsql怎么连接sql server_11


  • 重启服务
  • systemctl restart postgresql-11
  • 再次输入如下,连接数据库

psql -U testadm -h localhost testdb

【报错】如下


plsql怎么连接sql server plsql连接pg_重启_12


  • 这里有点邪门,这意味着只允许了IPv4地址登录。原因在那里呢?

【原因】经过查资料和分析,发现CentOS系统默认会把localhost解析成IPv6地址,所以pg数据库默认也会认为是一个IPV6链接

6.【解决】CentOS优先使用IPv6改为优先使用IPv4

  • 有个配置文件 /etc/gai.conf,这个文件默认不存在的,需要自己创建。
  • cd /etc
  • vi gai.conf
  • 添加 precedence ::ffff:0:0/96 100
  • 保存,退出,并重启网卡

7. 再次本地连接tesdb数据库

  • 此时的pd_hba.conf是这样配置
  • 直接将IPv6连接禁止了。


plsql怎么连接sql server plsql连接pg_sql_13


  • 输入

psql -U testadm -h localhost testdb

  • 【成功】


plsql怎么连接sql server plsql连接pg_sql_14


现在我们有了一个实际的数据库,也有了数据库用户,实现了本地连接。

下一步,我们要配置数据库的远程连接。