常用的pg的sql

日常積累的一些pg數據庫的操作函數。自己留着,也給各位giser分享一下吧。
————————————————————————————————————
1.整庫所有的字段獲取
————————————————————————————————————
SELECT col_description(a.attrelid,a.attnum) as comment,format_type(a.atttypid,a.atttypmod) as type,a.attname as name, a.attnotnull as notnull ,c.relname  
FROM pg_class as c,pg_attribute as a where a.attrelid = c.oid and a.attnum>0 and relname like '%doc%'


————————————————————————————————————
2.修改mutilinestring to simaplelinstring
————————————————————————————————————
UPDATE tablename set geom=st_linemerge(geom);

——————————————————————

3.pg查詢整庫數據量大小
————————————————————————————————————

SELECT 
table_schema || '.' || table_name 
AS table_full_name, pg_size_pretty(pg_total_relation_size('"' ||table_schema || '"."' || table_name || '"')) AS size
FROM 
information_schema.tables
ORDER BY
    pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')
DESC

————————————————————————————————
4.sql查重去重
————————————————————————————
select ctid, * from "i_szpipeline_ln_341300_2016" 

select distinct uid,  count(*) , * from "i_szpipeline_ln_341300_2016"  group by uid having count(*) > 1;

select ctid, * from "i_szpipeline_ln_341300_2016"  where ctid in (select min(ctid) from "i_szpipeline_ln_341300_2016" group by uid);

delete from "i_szpipeline_ln_341300_2016" where ctid not in (select min(ctid) from "i_szpipeline_ln_341300_2016" group by objectid);

——————————————————————————————————
5.計算三d空間位置
————————————————————————————————————————
ST_3DMakeBox
ST_3DIntersects
postgis函數查詢位置:
https://www.cnblogs.com/lilei2blog/p/7815253.html
http://www.postgis.net/docs/manual-2.5/PostGIS_Special_Functions_Index.html#NewFunctions_2_5

——————————————————————————————————————————

6.起點埋深範圍存儲過程
——————————————————————————————————————————
--drop function scope(int[],text)
CREATE FUNCTION gc_stasticsdeep(
arr int[],
cityname text)
RETURNS table( slen double precision)AS $$
DECLARE
  x int[];
  i int;
  sql text;
BEGIN

foreach x SLICE 1 IN ARRAY $1
  LOOP
    RAISE NOTICE 'row = %', x;
    RAISE NOTICE 'row = %', x[1];
    RAISE NOTICE 'row = %', x[2];
    sql:='select sum(len) from '||cityname||'.tablename where s_deep in ('||x[1]||','||x[2]||');';
     RAISE NOTICE 'sql= %', sql;
    return query execute sql;
  end loop ;
END;
$$ LANGUAGE plpgsql;

SELECT gc_stasticsdeep(ARRAY[[1,2],[2,3],[3,4]],'suzhou');

————————————————————————————————————————————
7.sql存儲過程,給定一個城市相同管類,相同管徑的列出來_________________________________________________________________________________________________
DROP FUNCTION public.gc_plsizequery(text);

CREATE OR REPLACE FUNCTION public.gc_plsizequery(
     cityname text,
     pipelinekind text,
     pipelinesize text
      )
 RETURNS TABLE(id character varying, belong character varying, roadname character varying,mat character varying, ds character varying, sdeep double precision, edeep double precision, length double precision, sx double precision, sy double precision, ex double precision, ey double precision) AS
$BODY$
declare 
sql varchar;  
BEGIN
sql :='select  uid,b_code,road,material,d_s,s_deep,e_deep,len, st_x(st_startpoint(geom)),st_y(st_startpoint(geom)),st_x(st_endpoint(geom)),st_y(st_endpoint(geom))  from '||cityname||'.i_szpipeline_ln_341300_2016 where pltype='''||pipelinekind||''' and d_s='''||pipelinesize||''';';
return query EXECUTE sql; 
    
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION public.gc_plsizequery(text,text,text)
  OWNER TO postgres;

————————————————————————————————————————
8.sql存儲過程  按城市   分組統計管線總長度
——————————————————————————————
DROP FUNCTION public.gc_stasticslength(text);

CREATE OR REPLACE FUNCTION public.gc_stasticslength(
     cityname text  )
  RETURNS TABLE(plkind character varying, sumlength double precision) AS
$BODY$
declare 
sql varchar;  
BEGIN
sql :='select pltype, sum(len) from '||cityname||'.i_szpipeline_ln_341300_2016  group by pltype';
return query EXECUTE sql; 
    
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION public.gc_stasticslength(text)
  OWNER TO postgres;

  select * from public.gc_stasticslength('suzhou')
————————————————————————————————————————————————————
9.sql存儲過程 按城市查找一個uid
————————————————————————————————————————————————

-- Function: public.gc_ods_queryid(text, text)

-- DROP FUNCTION public.gc_ods_queryid(text, text);

CREATE OR REPLACE FUNCTION public.gc_ods_queryid(
    IN cityname text,
    IN uuid text)
  RETURNS TABLE(id character varying, belong character varying, roadname character varying, plkind character varying, mat character varying, ds character varying, sdeep double precision, edeep double precision, length double precision, sx double precision, sy double precision, ex double precision, ey double precision) AS
$BODY$
BEGIN
  RETURN QUERY SELECT uid,b_code,road,pltype,material,d_s,s_deep,e_deep,len, st_x(st_startpoint(geom)),st_y(st_startpoint(geom)),st_x(st_endpoint(geom)),st_y(st_endpoint(geom)) from suzhou.i_szpipeline_ln_341300_2016  where uid=uuid ;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION public.gc_ods_queryid(text, text)
  OWNER TO postgres;

——————————————————————————————————————————————————
10.sql時間
——————————
UPDATE i_dl_gd_pt_341300_2016 set dupdate=now();
show time ZONE
set time ZONE 'PRC'
————————————————————
11.linux 常用目錄的作用和存放的內容:
————————————————————————————
/bin 存放使用者最長用的命令,如:cp、ls、cat,等等。
/boot 啓動linux時使用的一些核心文件。
/dev 是device(設備)的縮寫,這個目錄下是所有linux的外圍設備。
/etc 這個目錄用來存放系統管理所需要的配置文件和子目錄。
/home 用戶的主目錄,比如說有個用戶叫wang,那他的目錄就是/home/wang也可以用~wang來表示。
/lib 這個目錄是存放着系統最基本的動態連接庫,幾乎所有的應用程序都須用這些共享庫。
/lost+found 這個目錄平時是空的,當系統不正常關機後,這裏就是一些無家可歸文件的避難所。
/mnt 這個目錄是空的,系統提供這個目錄是讓用戶臨時掛接別的文件系統。
/proc 這個目錄是一個虛擬目錄,它是系統內存映射,我們可以直接通過訪問這個目錄來獲取系統信息。也就是說,這個目錄的內容不在硬盤上而是在內存中。
/root 系統管理員(root)的主目錄,作爲系統的擁有者的特權。
/sbin s就是super user的意義,也就是說這裏存放的是系統管理員使用的管理程序。
/tmp 這個目錄是存放一些臨時文件的地方。
/usr 我們用到的應用程序的文件幾乎都存放這個目錄下:/usr/X11R6存放X_Window的目錄;/usr/bin存放着許多應用程序;/usr /sbin給超級用戶使用的一些管理程序就放在這個裏面;/usr/include開發和編譯應用程序所需的頭文件;/usr/lib存放一些常用的動態連接共享庫和靜態歸檔案庫;/usr/local這是提供給一般用戶的/usr目錄,在這裏安裝軟件最合適。/usr/man存放幫助文檔。/usr /src開放的源代碼就存在這個目錄下。
/var 這個目錄存放那些不斷擴充的東西,爲了保持usr的相對穩定,那些才、經常被修改的目錄可以放在這個目錄下,如/var/log日誌文件。

————————————————————————
12常用st函數
———————————————————————————————— 
select ST_AsEWKT(geom) from admin.dkfg_2019320_399;
  select st_x(geom) from admin.dkfg_2019320_399;
    select st_y(geom) from admin.dkfg_2019320_399;
——————————————————————————————————————————————

13row_to_json() 函數
————————————————————————————————————
一個簡單的用法就是使用 row_to_json() 函數,它接受 “行值”並返回 JSON 對象:

1https://www.cnblogs.com/my4piano/p/5658264.html
select row_to_json(tableName) from tableName;

14

https://www.cnblogs.com/alianbog/p/5628543.html
GiST的意思是通用的搜索樹(Generalized Search Tree)


15添加pg擴展

create EXTENSION postgis擴展postgis的數據庫

16創建幾何類型爲面的函數

create table public.bbox(name text,chinesename text, geo geometry(Polygon))

 

16. 選擇public架構下的所有表,select tablename from pg_tables where schemaname='public'
17.更改表字段名alter table tset rename column no to name
18.更改表名alter public.table rename to table

19.COALESCE是一個函數, (expression_1, expression_2, ...,expression_n)依次參考各參數表達式,遇到非null值即停止並返回該值。如果所有的表達式都是空值,最終將返回一個空值。使用COALESCE在於大部分包含空值的表達式最終將返回空值。

20.unnest(array[10,20])   10  20

21.雜七雜八
alter table rename to tablename||'l' where tablename like '%line';
select tablename from pg_tables where schemaname='public' and tablename like '%line';
select  substring(tablename from 0 for char_length(tablename)-2) from pg_tables where schemaname='public' and tablename like '%line';
select * from pg_tables


22
-- 批量刪除表, schema: cat_fish
CREATE OR REPLACE FUNCTION batch_del_tables()
RETURNS int AS
$$
DECLARE
    r RECORD;
    count int;
BEGIN
    count := 0;
-- 創建 表
FOR r IN SELECT tablename FROM pg_tables where tablename like 'os_%' LOOP
    RAISE NOTICE 'tablename: %', r.tablename;
    EXECUTE 'DROP TABLE cat_fish.' || r.tablename || ' CASCADE';
    count := count + 1;
END LOOP;

RETURN count;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;

-- SELECT batch_del_tables();

10批量刪除sequence

create table test(sql text)
insert into public.test (sql) select  string_agg(relname,',') from pg_class where relnamespace='115117' and relname like '%seq'

insert into test(sql)
select string_agg( relname,',' )from pg_class where relnamespace='2200' and relname like 'bt_%'

23計算表student_info的列數

————————————————
information_schema.COLUMNS
“列”信息啊。

select count(*) from information_schema.COLUMNS where table_name='student_info'
意思就是計算表student_info的列數
24——————————————————————————
返回表達式中第一個非空表達式,如有以下語句:
SELECT COALESCE(NULL,NULL,3,4,5) FROM dual
其返回結果爲:3

25————————————————————————
select c.database_schema,coalesce(b.belong_plkind,b.plkind_code) from      pipeline_meta_config.pipeline_kinds b,
    pipeline_meta_config.pipeline_workarea c

返回結果:
"xicheng20km";"DC"
"kunminmg";"DC"
 

26管點生成管線st_makeline

——————————————————————————————————————
select st_makeline(ps1.geom ,pe1.geom) ,st_makeline(ps2.geom ,pe2.geom )from baotou.bt_zhp ps1 ,  baotou.bt_zhp pe1 , baotou.bt_zhp ps2 ,  baotou.bt_zhp pe2 ,baotou.bt_zhl l where l.s_point1=ps1.exp_no and l.s_point2=ps2.exp_no and l.e_point1=pe1.exp_no and l.e_point2=pe2.exp_no

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章