title: "Postgresql 操作" date: 2022-10-12T15:06:02+07:00
https://github.com/postgres-cn/pgdoc-cn
arch linux 安裝
pacman -Syu
pacman -S postgresql
sudo su - postgres createdb createuser dropdb dropuser
sudo -u postgres createdb```
sudo -u postgres psql # enter psql
alter user <username> with encrypted password 'password';
grant all privileges on database <database> to <username>;
sudo su - postgres
create user <username> with password 'password';
create database <database> owner <username>;
grant all privileges on database <database> to <username>;
\q
\dp [tablename]: 查看对象的访问权限列表
## 常用 SQL
```sql
-- 查看当前用户
select user;
-- 当前数据库
select current_database();
-- 建表
create table <schema>.<table>();
-- 角色
create role <role>;
alter role <role> with CREATEDB;
drop role <role>
-- 能登录的用户
select * from pg_user;
-- 所有角色
select * from pg_roles;
-- 查看 guest 表权限
select * from information_schema.role_table_grants where grantee='guest' group by table_name,table_schema;
-- 查看表所属权限
select * from information_schema.role_table_grants where table_name='tablename' group by grantee,table_schema;
-- 查看用户表权限
select * from information_schema.table_privileges where grantee='guest';
-- 查看用户的 USAGE 权限
select * from information_schema.usage_privileges where grantee='guest';
-- 检查权限
select has_database_privilege(<user>, <database>, <privilege>);
select has_schema_privilege(<user>, <schema>, <privilege>);
select has_table_privilege(<user>, <table>, <privilege>);
-- 查看 schema 所有表
\dt <schema>.*
select * from information_schema.tables where table_schema='public';
滚动更新后会更新 Postgresql 到新版本,再次启动 systemctl restart postgresql 后可能会报错 An old version of the database format was found. 导致启动失败。解决如下
升级数据 https://suay.site/?p=1130
stream replica https://girders.org/postgresql/2021/11/05/setup-postgresql14-replication/
logic replica https://hevodata.com/learn/postgresql-master-slave-replication/#intro
Connection pool https://github.com/yandex/odyssey https://pgpool.net/mediawiki/index.php/Main_Page
Replication extension https://github.com/2ndQuadrant/pglogical