• 欢迎访问DBA的辛酸事儿,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 欢迎大家关注博主公众号:DBA的辛酸事儿
  • 博文中若有错误的地方,请大家指正,大家的指正是我前进的动力

CentOS 7 安装postgresql10

PostgreSQL SEian.G 4年前 (2019-11-10) 2573次浏览 已收录 2个评论
文章目录[隐藏]

PostgreSQL系列文章

一、PostgreSQL介绍

PostgreSQL是加州大学伯克利分校计算机系开发的对象关系型数据库管理系统,目前拥有活跃的开源社区贡献,最近排名也不断前进,pgsql中其实有很多有点和设计理念都要比mysql更好一些,比如稳定性比较强;高并发读写情况下性能依然较好;支持丰富的几何类型并且在GIS领域地位领先;text支持各种长度,无需区分;nosql特性,支持array和json存储和搜索等,因为这些优点,pgsql应用场景也不断扩展,下面详细写一下pgsql入门的第一步,即先将pgsql安装至操作系统,过程如下:

二、下载软件包

pgsql有很多类型的包,对于不同linux发行版都有对应的编译好的包,安装很方便,另外如果对于通用的linux平台可以编译源码安装或者安装官方编译好的二进制包,源码包的安装仅仅比二进制安装多出一个编译步骤,其余的都一样,所以这里使用安装方式是安装编译好的二进制包

pgsql官网地址:https://www.postgresql.org/,进入后点击download就来到下载页,这里点击Linux下面的Other Linux选项,然后点击下方的tar.gz archive下载二进制归档

CentOS 7 安装postgresql10

然后就来到最终的pgsql下载页了,地址为:https://www.enterprisedb.com/download-postgresql-binaries

CentOS 7 安装postgresql10

如上图根据机器的位数下载对应的包,我这里下载的是x86-64的包,为:postgresql-10.10-2-linux-x64-binaries.tar.gz,下载之后准备安装

三、环境准备

1、创建postgres用户

[root@wjqbackup ~]# useradd postgres
[root@wjqbackup ~]# passwd postgres
Changing password for user postgres.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

注意:这里设置密码是linux用户postgres的登录密码,不是pgsql服务器的密码

2、创建安装和数据相关目录

[root@wjqbackup ~]# mkdir /usr/local/pgsql
[root@wjqbackup ~]# mkdir -p /data/pgsql/5432/data 

3、给postgres用户授权目录访问权限

[root@wjqbackup ~]# chown -R postgres /data/pgsql

四、安装并初始化

解压数据库并放到指定目录:

[root@wjqbackup pgsql]# tar zxvf postgresql-10.10-2-linux-x64-binaries.tar.gz
# 解压出来之后目录为pgsql
[root@wjqbackup pgsql]# mv pgsql /usr/local/

现在pgsql的安装目录就是/usr/local/pgsql

切换到postgres用户来操作数据库,pgsql数据库就以postgres为默认用户

[root@wjqbackup ~]# su - postgres

切换之后建议修改~/.bash_profile将pgsql的bin目录加至环境变量中,方便直接使用pgsql相关命令

[postgres@wjqbackup ~]$ vim .bash_profile
PGSQL=/usr/local/pgsql
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGSQL/bin
export PATH
[postgres@wjqbackup ~]$ source .bash_profile

下面初始化数据库:

[postgres@wjqbackup ~]$ /usr/local/pgsql/bin/initdb -D /data/pgsql/5432/data/
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /data/pgsql/5432/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... PRC
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /usr/local/pgsql/bin/pg_ctl -D /data/pgsql/5432/data/ -l logfile start

等待执行完毕,没什么问题就初始化成功了;

如图根据提示可以启动数据库:/usr/local/pgsql/bin/pg_ctl -D /data/pgsql/5432/data/ -l logfile start

[postgres@wjqbackup ~]$ /usr/local/pgsql/bin/pg_ctl -D /data/pgsql/5432/data/ -l /data/pgsql/5432/data/logfile start &
[1] 27635
[postgres@wjqbackup ~]$ waiting for server to start.... done
server started 

这里-l指定日志文件位置,这里直接输出在家目录下的logfile中,这个可以自己指定,这里-D指定数据目录,默认如果不加数据目录直接报错找不到,可以刚才说的环境变量配置文件中~/.bash_profile加入一行:

export PGDATA=/data/pgsql/5432/data/ 然后source进去即可,这样pgsql会自动去找PGDATA环境变量值,找不到才会报错

启动之后此时执行: ps -ef | grep postgres 就可以看到相关进程如下:

[postgres@wjqbackup data]$ ps -ef | grep postgre
postgres 27637     1  0 21:14 pts/3    00:00:00 /usr/local/pgsql/bin/postgres -D /data/pgsql/5432/data
postgres 27639 27637  0 21:14 ?        00:00:00 postgres: checkpointer process   
postgres 27640 27637  0 21:14 ?        00:00:00 postgres: writer process   
postgres 27641 27637  0 21:14 ?        00:00:00 postgres: wal writer process   
postgres 27642 27637  0 21:14 ?        00:00:00 postgres: autovacuum launcher process   
postgres 27643 27637  0 21:14 ?        00:00:00 postgres: stats collector process   
postgres 27644 27637  0 21:14 ?        00:00:00 postgres: bgworker: logical replication launcher 

pgsql默认的端口号为5432,通过netstat命令或者lsof命令都可以看到监听情况:

[postgres@wjqbackup ~]$ netstat -tuplan | grep 5432
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      27637/postgres      
tcp6       0      0 ::1:5432                :::*                    LISTEN      27637/postgres      

[postgres@wjqbackup ~]$ lsof -i:5432
COMMAND    PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
postgres 27637 postgres    3u  IPv6 13026143      0t0  TCP VM_242_174_centos:postgres (LISTEN)
postgres 27637 postgres    4u  IPv4 13026144      0t0  TCP VM_242_174_centos:postgres (LISTEN)

现在可以看到pgsql默认监听的是localhost或127.0.0.1,目前只能本机访问,如果远程访问就连接不上了,具体的配置文件是data目录下的postgresql.conf,可以通过修改这个配置文件来调整各个参数,比如:listen_addresses可以修改绑定的地址,默认是localhost,port可以修改监听的端口号,默认是5432,max_connections可以修改最大客户端连接数量,默认是100等等,这里就不再详细说了

停止postgresql进程

[postgres@wjqbackup data]$ /usr/local/pgsql/bin/pg_ctl -D /data/pgsql/5432/data/ stop
waiting for server to shut down.... done
server stopped

四、命令行界面简单操作

pgsql和mysql一样可以通过交互式提示符连接操作,连接方式如下:

[postgres@wjqbackup ~]$ psql -h 127.0.0.1 -d postgres -U postgres -p 5432
psql.bin (10.10)
Type "help" for help.
postgres=# help
You are using psql, the command-line interface to <a href="http://www.seiang.com/?tag=postgresql" title="查看更多关于PostgreSQL的文章" target="_blank">PostgreSQL</a>.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

其中-h参数指定服务器地址,默认为127.0.0.1,默认不指定即可,-d指定连接之后选中的数据库,默认也是postgres,-U指定用户,默认是当前用户,-p 指定端口号,默认是”5432″,其它更多的参数选项可以执行:psql –help进行查看

查看pgsql的版本

postgres=# select version();
                                                 version                                                  
----------------------------------------------------------------------------------------------------------
 <a href="http://www.seiang.com/?tag=postgresql" title="查看更多关于PostgreSQL的文章" target="_blank">PostgreSQL</a> 10.10 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23), 64-bit
(1 row)

命令提示符前面的就是当前的数据库,使用\l查看当前的数据库列表

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(3 rows)

默认postgres,template0和1这3个库是不允许操作的;

创建新的数据库执行:CREATE DATABASE wjqdb WITH OWNER=postgres ENCODING=’UTF-8′; 这样就创建好了数据库wjqdb,然后可以执行命令\c wjqdb切换当前数据库为wjqdb,然后执行\d可以查看当前数据库下的所有表:

postgres=# CREATE DATABASE wjqdb WITH OWNER=postgres ENCODING='UTF-8';     
CREATE DATABASE
postgres=# 
postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 wjqdb     | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(4 rows)

创建一个简单的数据表可以执行下面的命令:

wjqdb=# CREATE TABLE student (
wjqdb(#   id integer NOT NULL,
wjqdb(#   name character(32),
wjqdb(#   number char(5),
wjqdb(#   CONSTRAINT student_pkey PRIMARY KEY (id)
wjqdb(# );
CREATE TABLE

创建表之后可以使用 \d student; 查看表的详细信息,如下:

wjqdb=# \d student
                 Table "public.student"
 Column |     Type      | Collation | Nullable | Default 
--------+---------------+-----------+----------+---------
 id     | integer       |           | not null | 
 name   | character(32) |           |          | 
 number | character(5)  |           |          | 
Indexes:
    "student_pkey" PRIMARY KEY, btree (id)

现在可以插入一条测试数据:

wjqdb=# INSERT INTO student (id, name, number) VALUES (1, '张三', '1023');
 
然后可以查询这条数据:
wjqdb=# SELECT * FROM student; 

最后可以执行 \q 退出交互式界面

五、简单的配置

(1)配置监听的地址

对postgresql.conf文件进行编辑

#listen_addresses = ‘localhost’

修改成:

listen_addresses = ‘*’

(2)配置允许远程连接

对pg_hba.conf文件进行编辑

# IPv4 local connections:

host all all 127.0.0.1/32 trust

修改成

host all all 0.0.0.0/0 md5

最后一项method取值解释如下:

trust 任何连接都允许,不需要密码

reject 拒绝符合条件(前面几个条件)的请求

md5 接收一个MD5加密过的密码

password 接收一个密码来登陆,只在可信的网络使用这种方式

gss 使用gssapi认证,只在tcp/ip连接可用

sspi 只在windows可用的一种方式

krb5 不常用,只在TCP/IP可用

ident 使用操作系统用户名认证,验证它是否符合请求的的数据库用户名

ldap 使用LDAP服务器认证

cert 使用ssl客户端认证

pam 使用操作系统的pam模块服务

(3)修改postgre用户的密码

postgres=# \password
Enter new password: (输入密码)
Enter it again: (再次输入密码)
postgres=# 

重启实例

[postgres@wjqbackup ~]$ psql -h 127.0.0.1 -d postgres -U postgres -p 5432
Password for user postgres: 

(4)客户端远程登录测试

安装pgadmin4客户端进行连接测试

CentOS 7 安装postgresql10

CentOS 7 安装postgresql10

上面是一些最基本的操作,可以看出除了一些属性类的操作外,通用的sql语句和mysql几乎完全一样,只是数据类型表达有所不同;对于pgsql的安装和简单的使用就先说这些,另外pgsql还支持更多复杂的查询的操作,这个后续如果有涉及会继续分享;

 

CentOS 7 安装postgresql10


如果您觉得本站对你有帮助,那么可以收藏和推荐本站,帮助本站更好地发展,在此谢过各位网友的支持。
转载请注明原文链接:CentOS 7 安装postgresql10
喜欢 (5)
SEian.G
关于作者:
用心去记录工作,用心去感受生活,用心去学着成长;座右铭:苦练七十二变,笑对八十一难
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 这个教程非常棒,解决了我的问题,postgis有集成教程么?
    Giser2021-07-06 19:30 回复 Windows 10 | Chrome 91.0.4472.124
    • SEian.G
      目前没有,后面抽一些时间写一些pg系列的文章
      SEian.G2021-07-06 20:14 回复 Windows 10 | Chrome 91.0.4472.114