簡體   English   中英

Postgis:在過程中使用 srid 創建列

[英]Postgis: create column with srid in procedure

你好,

我想知道如何使用從數據庫中檢索到的 srid 創建一個空間化列。

-- OK --
ALTER TABLE POI ADD COORDS GEOMETRY(POINT, 26916);

-- KO (invalid input syntax for type integer: "sridval") --
DO $$
DECLARE
    sridval int;
BEGIN
    sridval := (select srid FROM project_options);
    ALTER TABLE POI ADD COORDS GEOMETRY(POINT, sridval);
END$$;

-- OK but verbose --
DO $$
DECLARE
    sridval int;
BEGIN
    ALTER TABLE POI ADD COORDS GEOMETRY(POINT);
    sridval := (select srid FROM project_options);
    PERFORM updategeometrysrid('POI', 'coords', sridval);
END $$;

最后一個解決方案不適用於生成的列。 前任:

ALTER TABLE POI ADD COORDS GEOMETRY(POINT, /*put srid here?*/) generated always as (ST_MakePoint(longitude, latitude)) stored;
CREATE INDEX COORDS_IDX ON POI USING GIST (COORDS);

您可以使用format()動態創建 DDL。

DO $$
DECLARE
    sridval int;
BEGIN
 sridval := (SELECT srid FROM project_options); 
 EXECUTE FORMAT('ALTER TABLE poi ADD COLUMN coords geometry(point, %s)',sridval);
END $$;

您還可以通過將查詢本身作為參數傳遞來跳過變量聲明:

DO $$
BEGIN
  EXECUTE FORMAT('ALTER TABLE poi ADD coords geometry(point, %s)',
                 (SELECT srid FROM project_options));
END $$;

DO $$
BEGIN
 EXECUTE FORMAT('ALTER TABLE poi ADD coords geometry(point, %s) 
                 GENERATED ALWAYS AS (ST_MakePoint(longitude, latitude)) STORED;',
                (SELECT srid FROM project_options));
END $$;
  • 此代碼假定project_options有單行

演示: db<>fiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM