1. 概述
PostgreSQL是一個免費的關系型數據庫服務器(ORDBMS)
2. 登錄數據庫
以用戶的名義登錄數據庫,這時使用的是psql命令
psql -h 127.0.0.1 -U dbuser -p 5832 -d database
上面的命令的參數含義如下:
- -h 指定服務器
- -p 指定端口
- -U 指定用戶
- -d 指定數據庫
輸入上面的命令以后,系統會提示輸入dbuser用戶的密碼。輸入正確,就可以登錄控制台了。
3. 控制台命令
操作 | 命令 |
設置密碼
|
\password dbuser |
退出控制台 | \q |
查看SQL命令的解釋 | \h command ,如\h select |
查看psql命令列表 | \? |
列出所有數據庫 | \l |
進入其他數據庫 | \c [database_name] |
列出當前數據庫的所有表格 | \d |
列出某一張表的結構 | \d [table_name] |
列出所有用戶 | \du |
打開文本編輯器 | \e |
列出當前數據庫和連接的信息 | \conninfo |
4. PSQL數據庫操作命令
操作 | 命令 |
創建數據庫 | create database [db_name]; |
刪除數據庫 | drop database [db_name]; |
查詢所有數據庫 | select datname from PG_DATABASE; / select * from PG_DATABASE; |
查詢某一數據庫的所有表 | select table_name FROM information_schema.tables where table_schema = 'public'; |
創建表 | create table if not exists ke_p_role ( |
插入表數據 | insert into ke_p_role (id, name, seq, description) values ('1', 'Administrator', '1', 'Have all permissions'), ('2', 'Devs', '2', 'Own add or delete'), ('3', 'Tourist', '3', 'Only viewer') insert into ke_p_role values ('1', 'Administrator', '1', 'Have all permissions'), ('2', 'Devs', '2', 'Own add or delete'), ('3', 'Tourist', '3', 'Only viewer') |
插入並返回插入的數據 | insert into ke_p_role values ('1', 'Administrator', '1', 'Have all permissions') returning *; |
根據字段,不存在則插入,存在則更新 | create table if not exists ke_topic_rank ( insert into ke_topic_rank values ('test1','test2','test3', 7) on conflict (cluster,topic,tkey) do update set tvalue=excluded.tvalue; |
查詢記錄 | select * from user_tbl; |
查詢記錄,帶limit和offset偏移量 | select * from ke_consumer_group_summary where cluster='cluster1' limit 2 offset 0; |
去重查詢 | select distinct on(name) * from t_ai_project; |
遞歸查詢 | with recursive summary as ( |
查詢,coalesce判斷是否為空 如果a.logsize為空,則返回右邊的0 |
select coalesce(sum(a.logsize),0) from (select logsize from ke_logsize where cluster='cluster1' and topic in ('phone') and tm='20200615' order by timespan desc limit 1) a |
查詢,ifnull,為空則返回0 |
select ifnull(lag,0) from ke_consumer_bscreen where cluster='cluster1' and tm='20200713' and "group"='consumer' and topic='topic1' order by timespan desc limit 1 |
更新數據 | update user_tbl set name = '李四' where name = '張三'; |
刪除數據 | delete from user_tbl where name = '李四' ; |
添加表字段 | alter table user_tbl add email varchar(40); |
更新表字段 | alter table user_tbl alter column signupdate set not null; |
重命名表字段 | alter table user_tbl rename column signupdate to signup; |
刪除表字段 | alter table user_tbl drop column email; |
重命名表名 | alter table user_tbl rename to backup_tbl; |
刪除表名 | drop table if exists backup_tbl; |
清空表數據 | truncate table ke_alarm_config; |
查詢postgres當前的連接數 | select * from pg_stat_activity; |
postgres的最大連接數 | show max_connections; |
注意:mysql的insert into values后面的值帶有雙引號,但postgresql帶有的是單引號,如:insert into ke_topic_rank values ('test1','test2','test3', 7)
5. 備份與還原
這里使用的是postgresql11。root用戶執行命令。
備份數據庫ranger命令:
/usr/pgsql-11/bin/pg_dump --format=d -n public --verbose --host=192.168.1.212 -j 8 --port=5832 --username=postgres --file=/root/ranger ranger
還原數據庫ranger命令:
/usr/pgsql-11/bin/pg_restore --format=d -n public --verbose --host=192.168.1.212 -j 8 --port=5832 --username=postgres --dbname=rangertest /root/ranger
注:
- -F, --format=c|d|t|p 輸出文件格式 (定制, 目錄, tar明文 (默認值));
- -n, --schema=SCHEMA 只轉儲指定名稱的模式;
- -v, --verbose 詳細模式;
- -j, --jobs=NUM 執行多個並行任務進行備份轉儲工作(只適用--format=d);
- -h, --host=主機名 數據庫服務器的主機名或套接字目錄;
- -p, --port=端口號 數據庫服務器的端口號
- -U, --username=名字 以指定的數據庫用戶聯接
- -f, --file=FILENAME 輸出文件或目錄名
- ranger 數據庫名(-d, --dataname=數據庫不能與-f, --file=FILENAME同時使用)
- /root/ranger 輸出文件或目錄名(-d, --dataname=數據庫不能與-f, --file=FILENAME同時使用)
單獨備份數據庫ranger的表x_policy_export_audit命令(只備份數據):
/usr/pgsql-11/bin/pg_dump -h 192.168.1.218 -p 5832 -U postgres -d ranger -t x_policy_export_audit -a > audit.sql
單獨還原數據庫ranger的表x_policy_export_audit命令:
/usr/pgsql-11/bin/psql -h 192.168.1.214 -p 5832 -U postgres -d rangertest -f audit.sql
注:
- -h, --host=主機名 數據庫服務器的主機名或套接字目錄;
- -p, --port=端口號 數據庫服務器的端口號
- -U, --username=名字 以指定的數據庫用戶聯接
- -d, --database=數據庫 數據庫名
- -f, --file=FILENAME 輸出文件或目錄名
6. 總結
【參考資料】
https://pg.sjk66.com/postgresql/create-table.html PostgreSQL 創建表 CREATE TABLE
https://www.alibabacloud.com/help/zh/doc-detail/52951.htm PostgreSQL UPSERT的功能與用法
https://blog.csdn.net/u011402596/article/details/38510547 postgresql的show databases、show tables、describe table操作
https://yanbin.blog/postgresql-unnest-batch-crud-merge/ PostgreSQL 批量插入, 更新和合並操作
https://blog.csdn.net/qq_43639296/article/details/90667860 postgresql中類似IFNULL用法
https://www.cnblogs.com/Paul-watermelon/p/10401344.html PostgreSQL入門教程(命令行)