PostgreSQL數據庫的sql語法(整理版)


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 (
  id serial primary key,  #唯一值,遞增
  name varchar (64) not null,  #字符串64位
  seq smallint not null,  #最小int型
  description varchar(128) not null # 字符串128位 
)

插入表數據

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 (
  cluster varchar(64),
  topic varchar(128),
  tkey varchar(128),
  tvalue bigint,
  primary key (cluster, topic, tkey)
)

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 (
  (select topic, diffval, timespan from ke_logsize where diffval > 0 order by topic asc, timespan desc limit 1)
  union all
  select u.* from summary s, lateral( select topic,diffval,timespan from ke_logsize where diffval > 0 and topic > s.topic order by topic asc, timespan desc limit 1) u
)
select topic, diffval, timespan, '1' as rownum, '1' as rank from summary;

查詢,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入門教程(命令行)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM