参考资料
PostgreSql 学习笔记一 CentOS下安装使用 及常用命令
安装
下面是转载
1、配置YUM库
vi /etc/yum.repos.d/CentOS-Base.repo
在[base] 和[updates] 区段添加:
exclude=postgresql*
配置完yum库之后卸载之前安装的Postgresql:
yum erase postgresql*
为了避免有遗留,可以多删除几遍,直到有如下提示:
已加载插件:fastestmirror, langpacks
参数 postgresql 没有匹配
不删除任何软件包
删除所有数据:
rm -rf /var/lib/pgsql
注意,我用的是
url为:
https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
安装PGDG RPM文件
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
安装contrib第三方包和分布式包,可以选择不安装:
yum -y install postgresql96-server postgresql96-contrib
安装如下:
完成
注意,当前默认安装路径是
/usr/pgsql-9.6/
初始化数据库
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Postgresql服务控制:
service postgresql-9.6 start/stop/restart/reload
开机自启动
sudo chkconfig postgresql-9.6 on
配置pg_hba.conf文件:
注意,文件在
/var/lib/pgsql/9.6/data/pg_hba.conf
sudo vi /var/lib/pgsql/9.6/data/pg_hba.conf
以下转载
靠近最下方的
host all all 127.0.0.1/32 ident
host all all ::1/128 ident
把ident 改为 md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
接下来可以使用postgre sql了。
postgresql9.6的相关服务命令
-- 启动
sudo systemctl start postgresql-9.6
-- 停止
sudo systemctl stop postgresql-9.6
-- 重启
sudo systemctl restart postgresql-9.6
请重启postgresql
使用
初次安装后,默认生成一个名为postgres的数据库和一个名为postgres的数据库用户。这里需要注意的是,同时还生成了一个名为postgres的操作系统用户。可以使用postgres登陆试下:
1、
sudo -i -u postgres
2、
psql
退出时使用命令:
postgres=# \q
上面只是第一步退出,
会进入到:
-base-版.本$
你需要输入exit命令才退到最外面。
给postgresq账号添加密码
1、
sudo su - postgres
2、
psql
3、
\password postgres 给postgress设置密码
然后你会看到这些只要输入及确认密码即可。
一些命令
添加用户
1.创建操作系统用户
先到操作系统
sudo adduser dbuser
sudo su - postgres
psql
\password postgres 给postgress设置密码
2.创建数据库用户
CREATE USER dbuser WITH PASSWORD 'password';
3.创建数据库,与用户关联
CREATE DATABASE exampledb OWNER dbuser;
4.设置所有权
GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;
登陆:
psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432
上面命令的参数含义如下:-U指定用户,-d指定数据库,-h指定服务器,-p指定端口。
输入上面命令以后,系统会提示输入dbuser用户的密码。输入正确,就可以登录控制台了。
查看登陆的信息
postgres=# \conninfo
默认端口号是5432,程序位置/var/run/postgresql
一些命令
创建用户
create user markgeng;
删除用户
drop user markgeng;
查看系统中的已有的用户
select * from pg_user;
psql
查看数据库
\l
切换数据库
\c 数据库名称
- 查看所有表
\d
设置远程访问
打开相关配置文件。
vi /var/lib/pgsql/9.6/data/postgresql.conf
将该文件中的listen_addresses项值设定为“*”
即:
listen_addresses= '*'
打开第二个配置文件:
sudo vi /var/lib/pgsql/9.6/data/pg_hba.conf
在该配置文件的host all all 127.0.0.1/32 md5行下添加以下配置,或者直接将这一行修改为以下配置
host all all 0.0.0.0/0 md5
如果不希望允许所有IP远程访问,则可以将上述配置项中的0.0.0.0设定为特定的IP值。
保存,重启一下:
systemctl restart postgresql-9.6
postgresql9.6升级到postgresql10
参考资料:
请先到官网看看具体流程:
Linux downloads (Red Hat family)
按照官网提示,选择对应平台及架构,
可以得到安装的命令:
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
注意,我这里因为之前安装过9.6,所以自行关闭了:
systemctl stop postgresql-9.6
然后才开始安装:
安装pg10:
yum install postgresql10
安装成功:
安装server包:
yum install postgresql10-server
安装目录默认在 /usr下面,我们可以看到:
初始化数据库及允许服务
注意,假如你之前有安装数据库,请先禁用服务,。
systemctl disable postgresql-9.6
![在这里插入图片描述](https://img-blog.csdn.net/20181023174507474?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NkbmlnaHQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
#先切换账号。。
su - postgres
/usr/pgsql-10/bin/postgresql-10-setup initdb
systemctl enable postgresql-10
systemctl start postgresql-10
好了,启动pg10以后,我们继续之前的配置,譬如,需要配置一下数据库的用户
ps:对于需要迁移的数据库,假设之前的数据库的拥有人是dbuser,那么新数据库本人建议也是要特地新建dbuser这个账号的。
先看看有没有dbuser账号:
groups dbuser
可以看到有dbuser的账号了,----这机子都是同一个机子,所以有这个账号,不过数据库是没有这个账号的,假设这个机子没有dbuser,那么新建账号如下【用于参考】:
添加用户
1.创建操作系统用户
先到操作系统
##系统已经有账号的这个就省略了
sudo adduser dbuser
sudo su - postgres
psql
\password postgres 给postgress设置密码
2.创建数据库用户
CREATE USER dbuser WITH PASSWORD 'password';
好了,账号新建了。
接下来配置一下远程连接这些。
vim /var/lib/pgsql/10/data/postgresql.conf
将该文件中的listen_addresses项值设定为“*”
即:
listen_addresses= '*'
sudo vim /var/lib/pgsql/10/data/pg_hba.conf
在该配置文件的host all all 127.0.0.1/32 md5行下添加以下配置,或者直接将这一行修改为以下配置
host all all 0.0.0.0/0 md5
如果不希望允许所有IP远程访问,则可以将上述配置项中的0.0.0.0设定为特定的IP值。
重启数据库:
systemctl restart postgresql-10
测试能否远程访问数据库:
远程连接成功。
注意:远程连接成功除了设定pg以外,还是需要开放阿里云端口的,这里没提到,请自行搜索。
虽然已经可以连接上,但是之前的9.6的数据不在。。嗯,虽然数据库已经升级了,但是数据不在。接下来就是迁移数据库
了。
数据库迁移
数据库迁移需要用到一个工具,
/usr/pgsql-10/bin/pg_upgrade
注意,由于各个文章的用法都是需要先检查一下是否能够升级,要启动服务,所以,为了两个服务能运行,需要将9.6的端口改改【这里改为5434】然后再检查:
vim /var/lib/pgsql/9.6/data/postgresql.conf
然后开启服务:
好了,
检查是否能够更新:
su - postgres
/usr/pgsql-10/bin/pg_upgrade -c -b /usr/pgsql-9.6/bin -B /usr/pgsql-10/bin -d 9.6版本的数据目录 -D 10版本的数据目录 -p 5434 -P 5432 -U postgres
注意,默认的数据目录在:
/var/lib/pgsql/{version}下面
所以这里的命令具体为:
/usr/pgsql-10/bin/pg_upgrade -c -b /usr/pgsql-9.6/bin -B /usr/pgsql-10/bin -d /var/lib/pgsql/9.6/data -D /var/lib/pgsql/10/data -p 5434 -P 5432 -U postgres
好了,具体出现问题,提示关闭postmaster服务。
所以,嗯,先停老版本数据库:
su - postgres
/usr/pgsql-9.6/bin/pg_ctl stop
接着,检查能否更新:
/usr/pgsql-10/bin/pg_upgrade -c -b /usr/pgsql-9.6/bin -B /usr/pgsql-10/bin -d /var/lib/pgsql/9.6/data -D /var/lib/pgsql/10/data -p 5434 -P 5432 -U postgres
提示错误:
Only the install user can be defined in the new cluster.
Failure, exiting
好了,
搜索结果如下:
根据提示,回想一下之前的配置,似乎添加了一个dbuser的账号,于是。。。我们试试删除这个账号看看
#重启服务先
systemctl restart postgresql-10
su - postgres
psql
drop user dbuser;
删除角色
\q
exit
#退出来
#然后进去
su - postgres
psql
/usr/pgsql-9.6/bin/pg_ctl stop
/usr/pgsql-10/bin/pg_upgrade -c -b /usr/pgsql-9.6/bin -B /usr/pgsql-10/bin -d /var/lib/pgsql/9.6/data -D /var/lib/pgsql/10/data -p 5434 -P 5432 -U postgres
果然!!!!删除角色之后就可以了。。。
既然已经可以升级了,那么就升级吧:
/usr/pgsql-10/bin/pg_upgrade -b /usr/pgsql-9.6/bin -B /usr/pgsql-10/bin -d /var/lib/pgsql/9.6/data -D /var/lib/pgsql/10/data -p 5434 -P 5432 -U postgres
#就是去掉了 -c 这个参数
出现异常了,这次是:
There seems to be a postmaster servicing the old cluster.
Please shutdown that postmaster and try again.
好了,根据提示:
/usr/pgsql-10/bin/pg_ctl stop
嗯。。坑爹了。。看来又要重启服务了。。。
退出当前模式
exit
然后这样:
这样来试试:
systemctl restart postgresql-10
su - postgres
/usr/pgsql-9.6/bin/pg_ctl stop
/usr/pgsql-10/bin/pg_ctl stop
不行。。。
出现错误:
继续尝试,就关闭10版本的pg ctl:
不行。。。好了,破镜子破摔:
直接关停9.6的服务:
what?更新成功。。
然后重启服务,远程连接:
真的可以连接上了,
还记得我们的数据库已经删除了dbuser这个账号吗?现在我们来看看是不是迁移的时候额外添加了dbuser的账号:
所以。。。难怪要删除新建的用户账号了,因为压根就是连用户账号一起导入的。。。