当前位置:   article > 正文

postgresql 数据库操作点记_postgis判断一个点是否在面中

postgis判断一个点是否在面中

普通查询

查询结果拼接

	select string_agg(field)
    1.一行数据中的 多字段值根据连接符拼接
    concat_ws(':',aaa,bbb)  或者  ||
    2.几行数据中的 同一 单字段值根据连接符拼接
    string_agg(ccc,' \r\n ')
    3.如果要将多个字段的值拼接成一个:
    string_agg(concat_ws(':',aaa,bbb),' \r\n ' order by aaa asc) as xxx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

查询所有字段 排除某些字段

    SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
          FROM information_schema.columns As c
            WHERE table_name = '$tablename' 
            AND  c.column_name NOT IN('createdat', 'updatedat', 'deletedat','geom')
    ), ',') || ',ST_AsText (geom) AS geom FROM $tablename As o WHERE o.deletedat IS NULL' As sqlstr
  • 1
  • 2
  • 3
  • 4
  • 5

处理时间

https://blog.csdn.net/snn1410/article/details/7741283

查询结果去除null值

SELECT  coalesce(wendushis,'') as wendushis,coalesce(yalishis,'') as yalishis,coalesce(yeweiss,'') as yeweiss,coalesce(liuliang,'') as liuliang  FROM equip_risksource where deletedat is NULL AND equipid = '$equipid'
  • 1

安装扩展 自动填充uuid

    -- Extension: "uuid-ossp"
    -- DROP EXTENSION "uuid-ossp";
     CREATE EXTENSION uuid-ossp
      SCHEMA public
      VERSION "1.0";
    使用时 字段默认值为 uuid_generate_v4()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

数据库插入guid函数

    CREATE OR REPLACE FUNCTION "public"."new_guid"()
     RETURNS "pg_catalog"."varchar" AS $BODY$   

    DECLARE   
    
      v_seed_value varchar(32);   
    
    BEGIN   
    
    select   
    
    md5(   
    
    inet_client_addr()::varchar ||   
    
    timeofday() ||   
    
    inet_server_addr()::varchar ||   
    
    to_hex(inet_client_port())   
    
    )   
    
    into v_seed_value;
    return (substr(v_seed_value,1,8) || '-' ||   
    
            substr(v_seed_value,9,4) || '-' ||   
    
            substr(v_seed_value,13,4) || '-' ||   
    
            substr(v_seed_value,17,4) || '-' ||   
    
            substr(v_seed_value,21,12));   
    
    END;   
    
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER  COST 100
    ;
    
    ALTER FUNCTION "public"."new_guid"() OWNER TO "postgres";
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

清空表格数据

    TRUNCATE tablename RESTART IDENTITY
  • 1

分组查询的GroupBy

    SELECT column-list  
    FROM table_name  
    WHERE [conditions ]  
    GROUP BY column1, column2....columnN  
    ORDER BY column1, column2....columnN  
  • 1
  • 2
  • 3
  • 4
  • 5

添加字段 修改字段

    alter table equip_pipelinemanager add column texturemateria  VARCHAR(100);
    COMMENT ON COLUMN equip_pipelinemanager.texturemateria IS '管线材质';
    
    ALTER TABLE equip_risk alter status  type int USING status::int;
  • 1
  • 2
  • 3
  • 4

获取字段名、类型、注释、是否为空:

    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 FROM pg_class as c,pg_attribute as a where c.relname = 'equip_linemanagement' and a.attrelid = c.oid and a.attnum>0
  • 1

数据库创建删除导入导出

    创建:createdb -U postgres -h 127.0.0.1 -p 5432 -e base_equipment
    删除:dropdb -U postgres -h 127.0.0.1 -p 5432 -e base_equipment
    导入:psql -h 127.0.0.1 -p 5432 -d base_equipment -U postgres -f F:\sqldata\jilin\base_equipment.sql
    导出:pg_dump -U postgres -h 127.0.0.1 -p 5432  -f F:\sqldata\jilin\base_equipment.sql base_equipment
  • 1
  • 2
  • 3
  • 4

postgresql 查询批更新

    INSERT INTO public_user (SELECT useraccount, password, username, userlevel,NULL,NULL,now(),now(),deletedat,userid,useraccount,'001' FROM pub_user)
    UPDATE tb1 SET c1=b.c1 c2=b.c2 FROM b WHERE tb1.c3 = b.c3 AND tb1.c4 = b.c4
    自更新
    UPDATE pdfhots SET pdfurl=replace(pdfhots.pdfurl,'10.177.6.192','10.177.5.3')
  • 1
  • 2
  • 3
  • 4

postgresql 查询批量插入

    INSERT INTO public_user (SELECT useraccount, password, username, userlevel,NULL,NULL,now(),now(),deletedat,userid,useraccount,'001' FROM pub_user)

    第二个例子
    INSERT INTO hotsrelation(hotid,relatedotherobjecttype,relatedotherobjectid) SELECT hotid,relatedotherobjecttype,relatedotherobjectid FROM hotsrelation1
  • 1
  • 2
  • 3
  • 4

postgresql 字段类型查询 转换

     select CAST('5' as char),CAST('2015-10-10' as char),CAST('e10adc3949ba59abbe56e057f20f883e' as uuid);
  • 1

postgresql删除活动链接的数据库 2019-4-28

    SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='base_graphdb1' AND pid<>pg_backend_pid();
  • 1

匹配操作

    不区分大小写模糊匹配:~* 'aa'
    左侧匹配:~ '^aa'
  • 1
  • 2

设置自增主键

    #表public_pdfsearch已建好  主键为id
    CREATE SEQUENCE public_pdfsearch_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
    alter table public_pdfsearch alter column id set default nextval('public_pdfsearch_id_seq');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

查询不区分大小写,去除重复记录,分组

    # ilike 关键字不区分大小写
    # distinct on (字段) 去除字段列的重复记录
    select distinct on (filepath)  filename,filepath,pages from public_pdfsearch  where context ilike '%IA344%' or imgtext ilike '%IA344%' or filename ilike '%IA344%'  limit 50 
    #分组
    select public_pdfsearch.filepath,   count(*) as num from public_pdfsearch  where context ilike '%陈%' or imgtext ilike '%陈%' or filename ilike '%陈%' GROUP BY filepath  ORDER BY num DESC
  • 1
  • 2
  • 3
  • 4
  • 5

创建gin索引


     CREATE EXTENSION pg_trgm;
    CREATE INDEX ix_gallery_map_author ON gallery_map USING gin (author gin_trgm_ops);
    EXPLAIN ANALYZE select * from gallery_map where author like '曹%';   QUERY PLAN
  • 1
  • 2
  • 3
  • 4

postgresql 获取汉字首字母函数

创建函数

CREATE OR REPLACE FUNCTION CnFirstChar(s character varying)
 RETURNS character varying AS
$BODY$
declare
 retval character varying;
 c character varying;
 l integer;
 b bytea; 
 w integer;
begin
l=length(s);
retval='';
while l>0 loop
 c=left(s,1);
 b=convert_to(c,'GB18030')::bytea;
 if get_byte(b,0)<127 then
 retval=retval || upper(c);
 elsif length(b)=2 then
 begin
 w=get_byte(b,0)*256+get_byte(b,1);
 --汉字GBK编码按拼音排序,按字符数来查找,基于概率来说,效率应该比挨个强:)
 if w between 48119 and 49061 then --"J";48119;49061;942
 retval=retval || 'J';
 elsif w between 54481 and 55289 then --"Z";54481;55289;808
 retval=retval || 'Z';
 elsif w between 53689 and 54480 then --"Y";53689;54480;791
 retval=retval || 'Y';
 elsif w between 51446 and 52208 then --"S";51446;52208;762
 retval=retval || 'S';
 elsif w between 52980 and 53640 then --"X";52980;53640;660
 retval=retval || 'X';
 elsif w between 49324 and 49895 then --"L";49324;49895;571
 retval=retval || 'L';
 elsif w between 45761 and 46317 then --"C";45761;46317;556
 retval=retval || 'C';
 elsif w between 45253 and 45760 then --"B";45253;45760;507
 retval=retval || 'B';
 elsif w between 46318 and 46825 then --"D";46318;46825;507
 retval=retval || 'D';
 elsif w between 47614 and 48118 then --"H";47614;48118;504
 retval=retval || 'H';
 elsif w between 50906 and 51386 then --"Q";50906;51386;480
 retval=retval || 'Q';
 elsif w between 52218 and 52697 then --"T";52218;52697;479
 retval=retval || 'T';
 elsif w between 49896 and 50370 then --"M";49896;50370;474
 retval=retval || 'M';
 elsif w between 47297 and 47613 then --"G";47297;47613;316
 retval=retval || 'G';
 elsif w between 47010 and 47296 then--"F";47010;47296;286
 retval=retval || 'F';
 elsif w between 50622 and 50905 then--"P";50622;50905;283
 retval=retval || 'P';
 elsif w between 52698 and 52979 then--"W";52698;52979;281
 retval=retval || 'W';
 elsif w between 49062 and 49323 then--"K";49062;49323;261
 retval=retval || 'K';
 elsif w between 50371 and 50613 then --"N";50371;50613;242
 retval=retval || 'N';
 elsif w between 46826 and 47009 then--"E";46826;47009;183
 retval=retval || 'E';
 elsif w between 51387 and 51445 then--"R";51387;51445;58
 retval=retval || 'R';
 elsif w between 45217 and 45252 then --"A";45217;45252;35
 retval=retval || 'A';
 elsif w between 50614 and 50621 then --"O";50614;50621;7
 retval=retval || 'O';
 end if;
 end;
 end if;
 s=substring(s,2,l-1);
 l=l-1;
end loop;
return retval;
end;
$BODY$
 LANGUAGE plpgsql IMMUTABLE;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77

使用方法

SELECT
 enumvalue,
 CnFirstChar(enumvalue) as firstChar 
FROM
 field_enum_list
WHERE
 tablename = 'equip_interplantpipeline'
AND filedname = 'pipenet'
ORDER BY
 firstChar
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

CASE WHEN

SELECT 
    CASE
    WHEN filename ~* 'F001' THEN
        2.4
    ELSE
        1.5
    END AS weight
    FROM
        equip_filemap
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

postgis 空间查询

修改空间字段类型 2019-4-25

    alter table underline alter geom type geometry(MultiLineString)
    
    alter table equip_riskmap alter COLUMN risklevel type int using risklevel::int
  • 1
  • 2
  • 3

查询坐标点,空间信息转坐标点

select ST_AsText(geom)
  • 1

两个几何要素是否相交

ST_Intersects(e.geom, r.geom)
  • 1

计算两点间的欧式距离

SELECT st_distance(geometry('POINT(115.967054194395 39.7315610991521)')::geography,geometry('POINT(115.96694062267 39.731557951387)')::geography)
  • 1

判断点是否在面内

ST_Contains(polygon.geom,point.geom)
  • 1

判断两个几何对象是否是重叠

 ST_Overlaps(geometry, geometry)
  • 1

判断两个几何对象是否互相穿过

ST_Crosses(geometry, geometry)
  • 1

验证几何图形是否有效

ST_MakeValid(geom)
  • 1

构建线

ST_LineFromText("linestring(115.99595273353 39.716924496395,115.99633092501 39.716964729531,115.99626655199 39.716835983498,115.9960600219 39.716846712334,115.99595273353 39.716924496395)")
  • 1

构建多边形

ST_MPolyFromText("multipolygon(((115.99595273353 39.716924496395,115.99633092501 39.716964729531,115.99626655199 39.716835983498,115.9960600219 39.716846712334,115.99595273353 39.716924496395)))")
  • 1

获取切割图形

st_split(ST_MakeValid(inputgeom),bable)--第一个参数为被切图行
  • 1

获取中心点

ST_Centroid(geom)
  • 1

获取相交部分

ST_Intersection(geom,geom)
  • 1
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/506038
推荐阅读
相关标签
  

闽ICP备14008679号