-- 这里就是先查一个表 -- 然后将另一个表和这个表关联的数据一起显示出来 -- 后边还用了一个条件判断,用于在不同的输入值下使用不同的判断条件 -- 这个 case 的含义是, inputValue 不为空,那么就使用 location = inputValue 的条件,如果为空,那么就返回所有数据,相当于不指定这个条件 select mft.name, mft.age from public.my_first_table mft leftouterjoin public.my_second_table mst on mft.id = mst.id where case when'inputValue'!='' then mft.location='inputValue' elsetrue end and mft.title like'%男%';
-- exists 中的 子查询 如果返回了行 -- 则结果为 true -- 否则结果为 false select id from public."FH_XHGL_XHGJGL" fxx where exists( select id from public."FH_XHGL_XHGJGL" where id =123123 );
-- 在表上添加注释,只是将关键字换为 TABLE -- 然后再加上表名即可 COMMENT ONTABLE public.my_table IS'This is the table users';
创建索引
SQL
1 2 3
-- 在 SB_ZB 表上创建索引 idx_SB_ZB_geometry -- 索引使用 gist 类型,并应用到 geometry 列 CREATE INDEX "idx_SB_ZB_geometry" ON public."SB_ZB" USING gist (geometry);
几个时间的默认值
SQL
1 2 3 4 5 6 7
-- CURRENT_TIMESTAMP: 用于填充默认的 timestamp 类型的值,值的样式为 2023-11-17 00:00:00.000 -- CURRENT_DATE: 用于填充默认的 date 类型的值,值的样式为 2023-11-17 CREATE TABLE my_table ( id serial PRIMARY KEY, my_timestamp timestampDEFAULTCURRENT_TIMESTAMP, my_date dateDEFAULTCURRENT_DATE );
插入数据时根据值不同插入不同的数据
SQL
1 2 3 4 5 6
INSERT INTO public.my_table (fc_name, fc_type) VALUES( casewhen'asdf'!=''thenNULLelse'asdf'end, 'asdfasdf' );
查询数据时根据值不同使用不同条件
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13
-- 这里在 where 中的 case 语句使用了判断 -- 这个 case 的含义是, inputValue 不为空,那么就使用 location = inputValue 的条件,如果为空,那么就返回所有数据,相当于不指定这个条件 select mft.name, mft.age from public.my_first_table mft leftouterjoin public.my_second_table mst on mft.id = mst.id where case when'inputValue'!='' then mft.location='inputValue' elsetrue end and mft.title like'%男%';
-- 更新时 ${$.http.reportStatus} 为 空字符串 则用原值,否则用该值 UPDATE public.my_table SET age=CASE WHEN'${$.http.reportStatus}'!=''THEN'${$.http.reportStatus}' ELSE age END WHERE id='test';
-- 1. 使用 FROM 子句关联一个表 UPDATE public.table1 SET my_name = split_part(my_name, 'my_tag', 2) FROM public.table2 WHERE table1.id = table2.id AND table2.a_type =1 -- 2. 使用 FROM 子句关联多个表 UPDATE table1 SET table1.column1 = table2.column2, table1.column3 = table3.column4 FROM table2 LEFTJOIN table3 ON table1.id = table3.id WHERE table1.id = table2.id;
跨库操作
跨库创建视图
BASH
1 2 3 4 5 6
# 1. 安装必备扩展包 # 在如下目录 ls 的情况下,如果有 unpackaged 相关的文件则为未安装 # 然后使用包管理器进行安装即可 cd /usr/pgsql-12/share/extension ls -al yum install postgresql12-contrib
-- 删除触发器 DROPTRIGGER IF EXISTS your_trigger_name ON your_table_name;
-- 要先把所有的触发器都删除掉, -- 再删除触发器函数 -- 触发器函数是有括号的,不要丢失 DROPFUNCTION IF EXISTS your_trigger_function_name();
修改触发器
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14
-- 触发器修改需要先删除再创建 DROPTRIGGER your_trigger_name ON your_table_name; CREATETRIGGER your_trigger_name BEFORE INSERTON your_table_name FOREACHROW EXECUTEFUNCTION your_new_trigger_function(); -- 触发器函数修改可以直接如下 CREATEOR REPLACE FUNCTION your_trigger_function() RETURNSTRIGGERAS $$ BEGIN -- Your new function code here RETURNNEW; END; $$ LANGUAGE plpgsql;
系统信息查询
查询表与列注释
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
SELECT c.relname AS table_name, obj_description(c.oid) AS table_comment, a.attname AS column_name, col_description(c.oid, a.attnum) AS column_comment FROM pg_class c LEFTJOIN pg_attribute a ON a.attrelid = c.oid LEFTJOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind ='r'-- 只选择普通表 AND n.nspname ='public'-- 指定模式名,如果是默认模式可以设置为 'public' AND c.relname ='zy_patrol_person'-- 替换为你的表名 ORDERBY a.attnum; -- 按字段序号排序
查询数据库连接数相关信息
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13
-- 当前连接数 SELECTcount(*) AS current_connections FROM pg_stat_activity;
-- 总连接数 SELECT setting AS max_connections FROM pg_settings WHERE name ='max_connections';
-- 空闲连接数 SELECTcount(*) AS idle_connections FROM pg_stat_activity WHERE state ='idle';