近日需要将PostgreSQL数据库从Windows中迁移到Linux中,Linux CentOS 7 安装PostgreSQL 9.5.17 安装过程 特此记录。

安装环境:

数据库:PostgreSQL 9.5.17

Linux:CentOS 7.3

数据库源文件下载:

在postgresql的官方即可找到源码文件目录(地址:https://www.postgresql.org/ftp/source/),在列表中找到需要下载的 9.5.17版本

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_sql

进入目录,看到文件列表,选择.tar.gz格式文件,点击下载

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_02

编译安装:

将下载好的数据库安装文件,上传至服务器的/user/local/目录下,然后进入该目录,解压安装包。

#   tar -zvxf postgresql-9.5.17.tar.gz  

进去解压后的postgresql文件夹,进行编译,并在在编译时指定安装目录

#  ./configure --prefix=/usr/local/postgresql  

编译出错

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_03

没有c编译器,安装gcc

#  yum install  gcc  

安装完成后,再次执行编译

编译出错

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_sql_04

缺少readline开发包,安装readline-devel包:

#  yum install  readline-devel  

 安装完成后,再次执行编译

 编译出错

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_05

缺少zlib开发包,安装zlib开发包:

#  yum install  zlib-devel   

 安装完成后,再次执行编译

编译成功,成功创建创建了config.status配置文件

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_06

编译配置完成,开始执行安装:依次执行:

#  make   

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_07

 

#  make install   

 

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_08

编译安装完成

设置用户权限及环境变量

编译安装成功后,接下来要做的就是创建一个普通用户,因为默认超级用户(root)不能启动postgresql,所以需要创建一个普通用户来启动数据库,执行以下命令创建用户:

#  useradd admin  

 需要设置权限,将postgres的数据目录全部赋权给admin用户(此处我将postgres的数据目录指定在在/usr/local/postgresql/data目录下):

# chown -R admin:admin /usr/local/postgresql/  

设置相关环境变量

此处仅仅设置admin用户的环境变量,所以首先切换到admin用户 

切换用户: #  su - admin   

然后打开.bash_profile文件并追加以下内容:

打开.bash_profile文件 : $   vi .bash_profile   

追加一下内容:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_09

PGHOME=/usr/local/postgresql
export PGHOME
PGDATA=/usr/local/postgresql/data
export PGDATA

PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_09

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_11

修改完成后可以通过 $ source ./.bash_profile  使其立即生效

检验环境变量是否设置正确

切换任意目录输入$  which psql  以及  $  psql -V  即可分别查看psql客户端的路径以及postgresql的数据库版本

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_12

初始化数据库

由于配置了环境变量,所以此处我们直接执行initdb命令即可完成db初始化

$  initdb   

初始化成功

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_13

进入postgresql的目录可以看到生成的数据目录data以及该目录的相关数据和配置文件:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_sql_14

接下来修改配置文件,pg_hba.confpostgresql.conf。一个是访问控制配置(127.0.0.1改为信任的客户端ip网段使其可以远程访问),一个是postgresql主配置文件(listen_address=localhost改为星号使其监听整个网络)。

进入/usr/local/postgresql/data目录,修改文件,这里将pg_hba.conf的ip地址修改为0.0.0.0/0,而加密方式改为md5,就表示需要密码访问: 

pg_hba.conf文件修改:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_15

修改postgresql.conf文件

listen_address=localhost改为星号使其监听整个网络:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_16

同时需要放开机器的5432端口,这里为了方便起见,直接关闭服务器防火墙:

关闭防火墙:

$ systemctl stop firewalld   

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_17

此时为普通用户,关闭防火墙需要root账户权限,需要输入root账户密码获取权限

禁止防火墙开机启动:

$ systemctl disable firewalld   

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_18

此时为普通用户,取消防火墙开机启动同样需要root账户权限,需要输入root账户密码获取权限

查看防火墙状态:

$ systemctl status firewalld  

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_19

防火墙已经关闭

至此配置相关的内容就全部完成了,最后就是启动并连接数据库了。

启动、连接数据库

在初始化数据库结束时我们已经看到了启动命令

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_20

由于之前设置了环境变量,所以已经指定了数据目录PGDATA,-l表示日志文件目录,通常需要指定,所以我们在/usr/local/postgresql根目录下再创建一个log目录用来存放日志文件并赋予可写的权限

进入 /usr/local/postgresql目录

创建文件夹

$ mkdir log  

赋予权限

$ chown -R admin:admin /usr/local/postgresql/log/   
启动数据库

$ pg_ctl start -l /usr/local/postgresql/log/pg_server.log   

启动成功: 

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_21

通过postgresql自带的客户端工具psql来进行连接(在连接是需要制定连接数据库,这里直接连接postgres数据库):

 $ psql postgres   

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_sql_22

设置admin用户的密码(默认为空),用psql连接成功后直接输入 \password  即会提示输入两次密码,如下图:

 

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_23

修改完密码以后,就是最重要的一点就是验证非本地客户端工具的连接了,毕竟我们是要做数据库服务器的,这里我选择的工具是Navicat Premium,在主机(Windows 10)打开Navicat与虚拟机中的postgresql服务器进行连接测试:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_24

可以发现连接成功,同理停止数据库可以使用命令 pg_ctl stop 来关闭postgresql服务,很简单,至此关于源码编译安装postgresql就全部结束了。

 

——————————————————————————————————————————————————

建库、表空间及用户

1.创建表空间和数据库实例
注:表空间必须不在PGDATA目录中

[postgres@VM_0_3_centos pg_log]$ cd /postgres/pgdb/tablespace/
创建表空间数据文件

[postgres@VM_0_3_centos tablespace]$ mkdir ts_ibank
    使用PG管理员连接默认数据库postgres创建表空间

[postgres@VM_0_3_centos tablespace]$ psql -d postgres -U postgres
psql (9.5.7)
Type "help" for help.
postgres=# create tablespace ts_ibank location '/postgres/pgdb/tablespace/ts_ibank';
CREATE TABLESPACE
postgres=# select spcname from pg_tablespace;
  spcname   
------------
 pg_default
 pg_global
 ts_ibank
(3 rows)
postgres=# set default_tablespace = ts_ibank;
SET


如果psql报错symbol lookup error:psql:undefined symbol:PQconnectdbParams

是没找到动态链接库,指定下
vim ~/.bashrc
添加
export LD_LIBRARY_PATH=/postgres/pgsql/lib

    退出超级用户,创建数据库实例,并指定表空间

postgres=# \q
[postgres@VM_0_3_centos tablespace]$ createdb ibank -D ts_ibank;
    以超级用户访问ibank数据库,创建user和对应的schema

[postgres@VM_0_3_centos tablespace]$ psql -d ibank
psql (9.5.7)
Type "help" for help.
ibank=# create role ibank login password 'ibank';
CREATE ROLE
ibank=# create schema ibank authorization ibank;
CREATE SCHEMA
ibank=#
      创建只读用户view,授权可以访问ibank用户的表,创建完成

ibank=# create role view login password 'view';
CREATE ROLE
ibank=# grant connect on database ibank to view;
GRANT
ibank=# grant usage on schema ibank to view;
GRANT
ibank=# grant select on all tables in schema ibank to view;
GRANT

pg数据库的数据文件路径为/postgres/pgsql/data pg数据库的表空间路径为 /postgres/pgdb/tablespace

    常用命令
    | 命令 | 解释 |
    |–|--|
    | create user test with password ‘123456’
    drop user test | 创建与删除用户 |
    | create database “testdb” with owner=”test ”; | 建数据库 |
    | drop database testdb | 删数据库 |
    | \c dbname| 切换数据库 |
    | \l | 列举数据库 |
    | \dt | 列举表 |
    | \d tblname | 查看表结构 |
————————————————
版权声明:本文为CSDN博主「Storm Mun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

近日需要将PostgreSQL数据库从Windows中迁移到Linux中,Linux CentOS 7 安装PostgreSQL 9.5.17 安装过程 特此记录。

安装环境:

数据库:PostgreSQL 9.5.17

Linux:CentOS 7.3

数据库源文件下载:

在postgresql的官方即可找到源码文件目录(地址:https://www.postgresql.org/ftp/source/),在列表中找到需要下载的 9.5.17版本

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_sql

进入目录,看到文件列表,选择.tar.gz格式文件,点击下载

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_02

编译安装:

将下载好的数据库安装文件,上传至服务器的/user/local/目录下,然后进入该目录,解压安装包。

#   tar -zvxf postgresql-9.5.17.tar.gz  

进去解压后的postgresql文件夹,进行编译,并在在编译时指定安装目录

#  ./configure --prefix=/usr/local/postgresql  

编译出错

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_03

没有c编译器,安装gcc

#  yum install  gcc  

安装完成后,再次执行编译

编译出错

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_sql_04

缺少readline开发包,安装readline-devel包:

#  yum install  readline-devel  

 安装完成后,再次执行编译

 编译出错

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_05

缺少zlib开发包,安装zlib开发包:

#  yum install  zlib-devel   

 安装完成后,再次执行编译

编译成功,成功创建创建了config.status配置文件

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_06

编译配置完成,开始执行安装:依次执行:

#  make   

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_07

 

#  make install   

 

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_08

编译安装完成

设置用户权限及环境变量

编译安装成功后,接下来要做的就是创建一个普通用户,因为默认超级用户(root)不能启动postgresql,所以需要创建一个普通用户来启动数据库,执行以下命令创建用户:

#  useradd admin  

 需要设置权限,将postgres的数据目录全部赋权给admin用户(此处我将postgres的数据目录指定在在/usr/local/postgresql/data目录下):

# chown -R admin:admin /usr/local/postgresql/  

设置相关环境变量

此处仅仅设置admin用户的环境变量,所以首先切换到admin用户 

切换用户: #  su - admin   

然后打开.bash_profile文件并追加以下内容:

打开.bash_profile文件 : $   vi .bash_profile   

追加一下内容:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_09

PGHOME=/usr/local/postgresql
export PGHOME
PGDATA=/usr/local/postgresql/data
export PGDATA

PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_09

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_11

修改完成后可以通过 $ source ./.bash_profile  使其立即生效

检验环境变量是否设置正确

切换任意目录输入$  which psql  以及  $  psql -V  即可分别查看psql客户端的路径以及postgresql的数据库版本

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_12

初始化数据库

由于配置了环境变量,所以此处我们直接执行initdb命令即可完成db初始化

$  initdb   

初始化成功

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_13

进入postgresql的目录可以看到生成的数据目录data以及该目录的相关数据和配置文件:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_sql_14

接下来修改配置文件,pg_hba.confpostgresql.conf。一个是访问控制配置(127.0.0.1改为信任的客户端ip网段使其可以远程访问),一个是postgresql主配置文件(listen_address=localhost改为星号使其监听整个网络)。

进入/usr/local/postgresql/data目录,修改文件,这里将pg_hba.conf的ip地址修改为0.0.0.0/0,而加密方式改为md5,就表示需要密码访问: 

pg_hba.conf文件修改:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_15

修改postgresql.conf文件

listen_address=localhost改为星号使其监听整个网络:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_16

同时需要放开机器的5432端口,这里为了方便起见,直接关闭服务器防火墙:

关闭防火墙:

$ systemctl stop firewalld   

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_17

此时为普通用户,关闭防火墙需要root账户权限,需要输入root账户密码获取权限

禁止防火墙开机启动:

$ systemctl disable firewalld   

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_18

此时为普通用户,取消防火墙开机启动同样需要root账户权限,需要输入root账户密码获取权限

查看防火墙状态:

$ systemctl status firewalld  

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_postgresql_19

防火墙已经关闭

至此配置相关的内容就全部完成了,最后就是启动并连接数据库了。

启动、连接数据库

在初始化数据库结束时我们已经看到了启动命令

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_20

由于之前设置了环境变量,所以已经指定了数据目录PGDATA,-l表示日志文件目录,通常需要指定,所以我们在/usr/local/postgresql根目录下再创建一个log目录用来存放日志文件并赋予可写的权限

进入 /usr/local/postgresql目录

创建文件夹

$ mkdir log  

赋予权限

$ chown -R admin:admin /usr/local/postgresql/log/   
启动数据库

$ pg_ctl start -l /usr/local/postgresql/log/pg_server.log   

启动成功: 

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_21

通过postgresql自带的客户端工具psql来进行连接(在连接是需要制定连接数据库,这里直接连接postgres数据库):

 $ psql postgres   

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_sql_22

设置admin用户的密码(默认为空),用psql连接成功后直接输入 \password  即会提示输入两次密码,如下图:

 

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_23

修改完密码以后,就是最重要的一点就是验证非本地客户端工具的连接了,毕竟我们是要做数据库服务器的,这里我选择的工具是Navicat Premium,在主机(Windows 10)打开Navicat与虚拟机中的postgresql服务器进行连接测试:

Linux CentOS 7 安装PostgreSQL 9.5.17(12.5也适用)_数据库_24

可以发现连接成功,同理停止数据库可以使用命令 pg_ctl stop 来关闭postgresql服务,很简单,至此关于源码编译安装postgresql就全部结束了。

 

——————————————————————————————————————————————————

建库、表空间及用户

1.创建表空间和数据库实例
注:表空间必须不在PGDATA目录中

[postgres@VM_0_3_centos pg_log]$ cd /postgres/pgdb/tablespace/
创建表空间数据文件

[postgres@VM_0_3_centos tablespace]$ mkdir ts_ibank
    使用PG管理员连接默认数据库postgres创建表空间

[postgres@VM_0_3_centos tablespace]$ psql -d postgres -U postgres
psql (9.5.7)
Type "help" for help.
postgres=# create tablespace ts_ibank location '/postgres/pgdb/tablespace/ts_ibank';
CREATE TABLESPACE
postgres=# select spcname from pg_tablespace;
  spcname   
------------
 pg_default
 pg_global
 ts_ibank
(3 rows)
postgres=# set default_tablespace = ts_ibank;
SET


如果psql报错symbol lookup error:psql:undefined symbol:PQconnectdbParams

是没找到动态链接库,指定下
vim ~/.bashrc
添加
export LD_LIBRARY_PATH=/postgres/pgsql/lib

    退出超级用户,创建数据库实例,并指定表空间

postgres=# \q
[postgres@VM_0_3_centos tablespace]$ createdb ibank -D ts_ibank;
    以超级用户访问ibank数据库,创建user和对应的schema

[postgres@VM_0_3_centos tablespace]$ psql -d ibank
psql (9.5.7)
Type "help" for help.
ibank=# create role ibank login password 'ibank';
CREATE ROLE
ibank=# create schema ibank authorization ibank;
CREATE SCHEMA
ibank=#
      创建只读用户view,授权可以访问ibank用户的表,创建完成

ibank=# create role view login password 'view';
CREATE ROLE
ibank=# grant connect on database ibank to view;
GRANT
ibank=# grant usage on schema ibank to view;
GRANT
ibank=# grant select on all tables in schema ibank to view;
GRANT

pg数据库的数据文件路径为/postgres/pgsql/data pg数据库的表空间路径为 /postgres/pgdb/tablespace

    常用命令
    | 命令 | 解释 |
    |–|--|
    | create user test with password ‘123456’
    drop user test | 创建与删除用户 |
    | create database “testdb” with owner=”test ”; | 建数据库 |
    | drop database testdb | 删数据库 |
    | \c dbname| 切换数据库 |
    | \l | 列举数据库 |
    | \dt | 列举表 |
    | \d tblname | 查看表结构 |