创建文件/etc/apt/sources.list.d/pgdg.list,并为存储库添加一行
sudo vi /etc/apt/sources.list.d/pgdg.list
并为存储库添加一行
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
导入存储库签名密钥,并更新软件包列表
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
sudo apt-get update
root@vm-199:~# sudo apt-get install libreadline-dev
root@vm-199:~# sudo apt-get install zlib1g-dev
root@vm-199:~# sudo apt-get install gcc
创建解压安装目录
mkdir -p /opt/postgresql
解压
tar -zxvf postgresql-9.6.11.tar.gz
在解压后的包内运行配置命令
./configure -prefix=/opt/postgresql
运行make
可能报错
The program 'make' can be found in the following packages:
* make
* make-guile
Try: apt install
解决办法
sudo apt-get install build-essential
make
验证安装是否成功,输入命令:
ls -l /usr/local/pgsql/
如果 bin include lib 和 share都出现,说明安装成功
运行make install
make install
验证安装是否成功,输入命令:
ls -l /usr/local/pgsql/
如果 bin include lib 和 share都出现,说明安装成功
adduser postgres
passwd postgres
创建postgresql 数据目录,分别运行:
mkdir /opt/postgresql/data/
chown postgres:postgres /opt/postgresql/data
验证
ls -ld /opt/postgresql/data
出现以下结果为正确
drwx------ 19 postgres postgres 4096 Apr 29 19:20 /opt/postgresql/data
初始化postgresql数据目录(徐切换至postgres用户)
su postgres
/opt/postgresql/bin/initdb -D /opt/postgresql/data/
验证postgresql数据目录
ls -l /opt/postgresql/data
启动pgsql数据库
/opt/postgresql/bin/pg_ctl -D /opt/postgresql/data start
测试是否成功(postgres用户下)
/opt/postgres/bin/psql
可能报错
The program 'psql' is currently not installed. To run 'psql' please ask your administrator to install the package 'postgresql-client-common'
解决办法:
安装配套工具
apt-get install postgresql-client-common
apt-get install postgresql-client-9.6
可能报错
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
或者
./pg_ctl: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
解决办法:
vim /etc/ld.so.conf.d/libc.conf
新增 /opt/postgresql/lib 到libc.conf的文件末尾
执行
ldconfig
测试(在postgres用户下)
/opt/postgres/psql
主要修改为postgresql.conf和pg_hba.conf文件
设置数据库文件地址
data_directory = '/opt/postgresql/data'
hba_file = '/opt/postgresql/data/pg_hba.conf'
ident_file = '/opt/postgresql/data/pg_ident.conf'
具体修改:将 #listen_addresses = 'localhost' 前的#号去掉,然后将后面的localhost改为*
将 #port = 5432 前的#去掉
将#password_encryption = on 前面的#号去掉
wq保存退出
对pg_hba.conf内容进行配置,然后再在最下面加入
host all all 0.0.0.0 0.0.0.0 md5
注意区分linux账户和数据库账户
在数据库终端内
postgres=# ALTER USER postgres WITH PASSWORD 'postgres';
退出数据库
\q
切换到roott用户
su -root
删除PostgreSQL用户密码,命令:
sudo passwd -d postgres
设置PostgreSQL系统用户的密码,命令:
sudo -u postgres passwd
按照提示,输入两次新密码(postgres)
基本完成源码安装
如果修改默认端口,则在启动pg的时候要在postgres用户下
psql -p 修改后的端口号
root 用户下进入pg
sudo -u postgres psql
创建用户’test’,并创建密码 ‘123456’
create user test with password '123456';
创建数据库testdb,所有者为test;
create database testdb owner test;
将testdbs数据库的所有权限赋予test,否则test只可以登录psql,没有任何数据库操作权限(这样分配的权限,只有对当前数据库的权限,超级用户,建立角色,建立数据库,复制的权限等)
grant all privileges on database testdb to test;
为数据库的用后增加权限,超级用户,建立角色,建立数据库,复制的权限等
查看当前数据库用户的权限
\du
为用户分配超级用户权限
alter role test superuser;
为用户分配建立角色的权限
alter role test createrole;
为用户分配建立数据库的权限
alter role test createdb;
为用户分配复制的权限
alter role test Replication;
为用户分配复制的权限为用户分配绕过RLS的权限
alter role test BypassRLS;