赞
踩
- #[root@VMTest postgresql16]# useradd -g postgres postgres
- [root@VMTest postgresql16]# useradd postgres
插曲:在线YUM安装
在线安装参考: PostgreSQL: Linux downloads (Red Hat family)
注意:
centos7只支持
rhel-7
字眼的目录。
下载地址: Index of /pub/repos/yum/15/redhat/rhel-7.12-x86_64/
- libzstd-1.5.2-1.el7.x86_64.rpm
- postgresql15-15.5-1PGDG.rhel7.x86_64.rpm
- libicu-50.2-4.el7_7.x86_64.rpm(可能需要)
- postgresql15-libs-15.5-1PGDG.rhel7.x86_64.rpm
- postgresql15-server-15.5-1PGDG.rhel7.x86_64.rpm
-
- #其中, libicu-50.1.2-17.el7.x86_64.rpm的下载地址是
- #https://centos.pkgs.org/7/centos-x86_64/libicu-50.1.2-17.el7.x86_64.rpm.html
- # http://mirror.centos.org/centos/7/os/x86_64/Packages/libicu-50.2-3.el7.x86_64.rpm
- http://mirror.centos.org/centos/7/os/x86_64/Packages/libicu-50.2-4.el7_7.x86_64.rpm
-
- # 下载
- $. wget https://koji.xcp-ng.org/kojifiles/packages/zstd/1.5.2/1.el7/x86_64/libzstd-1.5.2-1.el7.x86_64.rpm
-
- $. wget https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7.12-x86_64/postgresql15-15.5-1PGDG.rhel7.x86_64.rpm
-
- $. wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libicu-50.2-4.el7_7.x86_64.rpm
-
- $. wget https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7.12-x86_64/postgresql15-libs-15.5-1PGDG.rhel7.x86_64.rpm
-
- $. wget https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7.12-x86_64/postgresql15-server-15.5-1PGDG.rhel7.x86_64.rpm

将上述下载的rpm包上传到centos7
上, 并使用rpm -ivh
进行安装:
- [root@VMTest ~]# rpm -ivh libzstd-1.5.2-1.el7.x86_64.rpm
- [root@VMTest ~]# rpm -ivh libicu-50.2-4.el7_7.x86_64.rpm
- # 安装lib库
- [root@VMTest ~]# rpm -ivh postgresql15-libs-15.5-1PGDG.rhel7.x86_64.rpm
- # 安装客户端
- [root@VMTest ~]# rpm -ivh postgresql15-15.5-1PGDG.rhel7.x86_64.rpm
- # 安装服务端
- [root@VMTest ~]# rpm -ivh postgresql15-server-15.5-1PGDG.rhel7.x86_64.rpm
-
- #ps:如果要卸载的话, 先停止postges服务,然后执行下面的命令即可
- [root@VMTest ~]# rpm -qe postgresql15-libs-15.5-1PGDG.rhel7.x86_64.rpm
- [root@VMTest ~]# rpm -qe postgresql15-15.5-1PGDG.rhel7.x86_64.rpm
- [root@VMTest ~]# rpm -qe postgresql15-server-15.5-1PGDG.rhel7.x86_64.rpm
- [root@VMTest ~]# /usr/pgsql-15/bin/postgresql-15-setup initdb
- Initializing database ... OK
- [root@VMTest ~]# systemctl enable postgresql-15 --now #设置开机启动
- [root@VMTest ~]# systemctl status postgresql-15
- [root@VMTest ~]# systemctl start postgresql-15 #启动postgresql
-
- #查看启动效果
- 方法一:
- [root@VMTest ~]# ps -ef | grep postgre
-
- #方法二:
- [root@VMTest ~]# systemctl status postgresql-15
- # 移动前须先执行命令:
- 1. mkdir -p /data/pgsql/
- 2. chown postgres:postgres -R /data/pgsql
- 3. systemctl stop postgresql-15
- [root@VMTest ~]# mv /var/lib/pgsql/15/* /data/pgsql/
- [root@VMTest ~]# chown -R postgres:postgres /data/pgsql/
- [root@VMTest ~]# chmod 700 /data/pgsql/data -R
- #a.修改指定的数据目录
- [root@VMTest ~]# vi /usr/lib/systemd/system/postgresql-15.service
- #修改Environment=PGDATA=/var/lib/pgsql/15/data/为
- Environment=PGDATA=/data/pgsql/data/
-
- #b.修改数据目录
- [root@VMTest ~]# vi /data/pgsql/data/postgresql.conf
- #修改data_directory:
- data_directory = '/data/pgsql/data'
-
- 其它配置修改:
- log_directory = 'log'
- max_connections = 100
- [root@VMTest ~]# systemctl daemon-reload
- [root@VMTest ~]# systemctl restart postgresql-15
- [root@VMTest ~]# ps -ef | grep postgres #确认启动成功
- [root@VMTest ~]# systemctl status postgresql-15
- [root@VMTest ~]# su postgres
- [postgres@VMTest root]$ psql
- could not change directory to "/root": Permission denied
- psql (11.1)
- Type "help" for help.
-
- postgres=#
-
- #------------------------------------------------------
- # 执行命令
- postgres=# ALTER ROLE postgres WITH PASSWORD '123abc';
- # 退出
- postgres=# \q
- #修改1, ps:认证方式解释见附录
- # [postgres@VMTest root]$ vi /var/lib/pgsql/15/data/pg_hba.conf
- [postgres@VMTest root]$ vi /data/pgsql/data/pg_hba.conf
- # IPv4 local connections:
- #host all all 127.0.0.1/32 ident
- host all all 0.0.0.0/0 md5
-
- #new
- host all all 0.0.0.0/0 trust
-
- #修改2
- # [root@vmfiend01 ~]# vi /var/lib/pgsql/15/data/postgresql.conf
- [root@vmfiend01 ~]# vi /data/pgsql/data/postgresql.conf
- #修改listen_addresses
- listen_addresses = '*'
- #有需求修改port
- #port = 5432
-
- #重启数据库
- [root@VMTest ~]# systemctl restart postgresql-15

- [root@VMTest ~]# su postgres
- [postgres@VMTest root]$ psql
- postgres=# create database databasename;
postgres=# \l
postgres=# \c databasename;
postgres=# \d
deepcogni=# create schema test1;
navicat
连接时会遇到以下问题, 解决方式如下:
- 问题:
- 错误: 字段“datlastsysoid“不存在(Navicat报错)
-
- 说明:
- 查阅一下资料,Postgres 15 从表中删除了 datlastsysoid 字段pg_database,因此 Navicat 15.0.29 或 16.1 之前的任何版本在查找此已弃用字段时都会引发此错误。
-
- 解决:
- 方式一:
- 要解决此问题,请升级到最新的 Navicat 15.0.29 或 16.1 及更高版本(可能需要新的许可证)
-
- 方式二(use):
- 打开 Navicat 文件夹(通常在 C:\Program Files\PremiumSoft\Navicat…) 下),
- 找到 libcc.dll 并创建此文件的备份。
- 在任何十六进制编辑器中打开此文件,如果需要,您可以使用在线工具,例如 https://hexed.it/。
- 在文件中搜索“SELECT DISTINCT datlastsysoid”,并将其替换为“SELECT DISTINCT dattablespace”。
- 将文件保存在原始位置。如果遇到任何安全问题,请将其另存为“.txt”文件,然后将其重命名为“.dll”。

- [root@VMTest ~]# su postgres
- [postgres@VMTest root]$ psql #进入postgresql命令行
-
- postgres=# \q # 退出 or: exit;
- postgres=# \l # 列出所有库
- postgres=# \du # 列出所有用户, 指令显示用户和用户的用户属性
- postgres=# \d # 列出库下所有表
- postgres=# \di # 查看索引
- postgres=# dt # 列举表, 相当于mysql的show tables
- postgres=# \dn # 查看模式schema列表
- postgres=# \dn+ # 查看模式schema列表详情
-
- postgres=# \z 或 \dp # 显示用户访问权限
- postgres=# \c dbname # 切换数据库,相当于mysql的use dbname
- postgres=# \d tblname # 查看表结构, 相当于desc tblname,show columns from tbname
-
- postgres=# DROP DATABASE phone; # 删除数据库
-
- # 指令查看全部可设置的管理权限
- postgres=# \h CREATE ROLE
-
- # 显示所有可设置的访问权限
- postgres=# \h GRANT
-
-
- # 创建表(大小写均可)
- deepcogni=# create table test(id integer not null primary key);
-
- # 添加表的字段
- deepcogni=# alter table phone add column phone_number character varying(11) not null;
-
- # 重命名一个表
- deepcogni=# alter table [表名A] rename to [表名B];
-
- # 删除一个表
- deepcogni=# drop table [表名];

- # 1.查看客户端版本
- [root@BC-VM-d20d ~]# psql --version
-
- # 2.查看服务器端版本
- # 2.1 查看详细信息
- postgres=# select version();
-
- # 2.2 查看版本信息
- postgres=# show server_version;
-
- # 2.3 查看数字版本信息包括小版号
- postgres=# SHOW server_version_num;
- # 或
- postgres=# SELECT current_setting('server_version_num');
-
- # 3.注意事项
- postgres=# SELECT current_setting(‘server_version_num’);
-
- # 返回类型为text,如果需要可以转换为interger:
- postgres=# SELECT current_setting('server_version_num')::integer;

- #参数含义: -U指定用户 -d要连接的数据库 -h要连接的主机 -W提示输入密码。
- psql -U username -d database_name -h host -W
-
- #use -- 使用linux当前用户登录连接到'pgtest'数据库
- [postgres@VMTest root]$ psql -d pgtest
- psql (15.5)
- Type "help" for help.
-
- pgtest=#
- # 当不指定参数时psql使用操作系统当前用户的用户名, 作为postgres的登录用户名和要连接的数据库名。
- # 所以在PostgreSQL安装完成后可以通过以下方式登录, 此时连接的是postgres数据库, 且登录用户也是postgres。
- [root@VMTest ~]# su postgres
- [postgres@VMTest root]$ psql
createuser username
CREATE ROLE rolename;
CREATE USER username;
CREATE USER和CREATE ROLE的区别在于,CREATE USER指令创建的用户默认是有登录权限的,而CREATE ROLE没有。
\du 指令显示用户和用户的用户属性
CREATE ROLE role_name WITH optional_permissions;
- CREATE ROLE username WITH LOGIN;
- \h CREATE ROLE #指令查看全部可设置的管理权限
ALTER ROLE username WITH attribute_options;
- # 赋予登录权限
- ALTER ROLE david LOGIN
-
- # 禁止登录
- ALTER ROLE username WITH NOLOGIN
-
- # 赋予创建角色的权限
- postgres=# ALTER ROLE pg_test_user_4 WITH CREATEROLE
-
- # 修改密码
- postgres=# ALTER ROLE pg_test_user_4 WITH PASSWORD '654321';
-
- # 设置角色的有效期
- postgres=# ALTER ROLE pg_test_user_4 VALID UNTIL 'JUL 7 14:00:00 2012 +8';
-
- #其它 root: role name
- postgres=# ALTER ROLE root SUPERUSER;
- postgres=# ALTER ROLE root Superuser;
- postgres=# ALTER ROLE root Createrole;
- postgres=# ALTER ROLE root CreateDB;
- postgres=# ALTER ROLE root INHERIT;
- postgres=# ALTER ROLE root CONNECTION;
- deepcogni=# ALTER ROLE root BypassRLS;
-
- postgres=# ALTER ROLE name RENAME TO newname;
-
- ALTER ROLE name SET configuration_parameter { TO | = } { value | DEFAULT }
- ALTER ROLE name RESET configuration_parameter描述
- ALTER ROLE 修改一个数据库角色的属性。

- ALTER ROLE
- 名称
- ALTER ROLE -- 修改一个数据库角色
- 语法
- ALTER ROLE name [ [ WITH ] option [ ... ] ]
-
- 这里的 option 可以是:
-
- SUPERUSER | NOSUPERUSER
- | CREATEDB | NOCREATEDB
- | CREATEROLE | NOCREATEROLE
- | CREATEUSER | NOCREATEUSER
- | INHERIT | NOINHERIT
- | LOGIN | NOLOGIN
- | CONNECTION LIMIT connlimit
- | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
- | VALID UNTIL 'timestamp'
-
- ALTER ROLE name RENAME TO newname
-
- ALTER ROLE name SET configuration_parameter { TO | = } { value | DEFAULT }
- ALTER ROLE name RESET configuration_parameter描述
- ALTER ROLE 修改一个数据库角色的属性。

GRANT permission_type ON table_name TO role_name;
- #赋予demo_role demo表的update权限
- GRANT UPDATE ON table_name TO role_name;
-
- #赋予demo_role所有表的SELECT权限
- GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC to demo_role;
- # 赋给用户所有权限
- GRANT ALL ON table_name TO role_name;
-
- # 将SELECT权限赋给所有用户, 大写的PUBLIC是一个特殊的关键字,代表了all users
- GRANT SELECT ON table_name TO PUBLIC;
- \z或\dp 指令显示用户访问权限。
- \h GRANT 显示所有可设置的访问权限
- REVOKE permission_type ON table_name FROM user_name;
- # 其中 permission_type 和 table_name 含义与 GRANT 指令中相同。
在postgres中用户实际上是role,同时组也是role。 包含其他role的role就是组。
- CREATE ROLE temporary_users;
- GRANT temporary_users TO demo_role;
- GRANT temporary_users TO test_user;
- # 切换到role_name用户
- SET ROLE role_name;
-
- #切换回最初的role
- RESET ROLE;
ALTER ROLE test_user INHERIT;
- DROP ROLE role_name;
- DROP ROLE IF EXISTS role_name;
认证方式说明:
- 1. trust
- 无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的
- 任意PostgreSQL数据库用户身份登入,而不需要口令或者其他任何认证。
-
- 2. reject
-
- 无条件地拒绝连接。这有助于从一个组中"过滤出"特定主机,例如一个reject行可以阻塞一个
- 特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。
-
- 3. md5
- 要求客户端提供一个双重 MD5 加密的口令进行认证。
-
- 4. password
- 要求客户端提供一个未加密的口令进行认证。
- 因为口令是以明文形式在网络上发送的,所以我们不应该在不可信的网络上使用这种方式。
-
- 5. gss
- 用 GSSAPI 认证用户。只对TCP/IP 连接可用。
-
- 6. sspi
- 用 SSPI 来认证用户。只在Windows 上可用。
-
- 7. ident
- 通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。
- Ident 认证只能在 TCIP/IP 连接上使用。当为本地连接指定这种认证方式时,将用 peer 认证来替代。
-
- 8. peer
- 从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名。这只对本地连接可用。
-
- 9. ldap
- 使用LDAP服务器认证。
-
- 10. radius
- 用 RADIUS 服务器认证。
-
- 11. cert
- 使用 SSL 客户端证书认证。
-
- 12. pam
- 使用操作系统提供的可插入认证模块服务(PAM)认证。
-
- 13. bsd
- 使用由操作系统提供的 BSD 认证服务进行认证。

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。