我有一個包含一些 PostGIS 相關資料的表。這些資料在 INSERT 或 UPDATE 時自動生成。
ALTER TABLE "Room" ADD COLUMN geolocation geography(Polygon, 4326) GENERATED ALWAYS AS (ST_MakePolygon("polygon"::geometry)) STORED;
有時,多邊形列上提供的資料可能不適合生成函式并導致錯誤。我想處理這個錯誤并在它失敗時設定一個默認值。
-- 最后的選擇 --
- 創建處理此任務的 postgres 函式,但這會使作業與代碼庫分離。
uj5u.com熱心網友回復:
在您使用時,ST_MakePolygon我假設該列"polygon"包含 LINESTRING,有時它們是無效的,這會在您的 DDL 陳述句中引發錯誤。
您可以做的是CASE在嘗試創建多邊形之前創建一個驗證幾何圖形的條件。例如,此查詢在嘗試創建 POLYGON 之前檢查幾何圖形是否有效、是否為 LINESTRING 以及其環是否閉合。如果失敗,它會生成一個empty polygon(NULL如果需要,可以將其更改為):
ALTER TABLE "Room"
ADD COLUMN geolocation geography(Polygon, 4326)
GENERATED ALWAYS AS (
CASE
WHEN ST_IsValid("polygon") AND
GeometryType("polygon")='LINESTRING' AND
ST_IsClosed("polygon"::geometry) THEN
ST_MakePolygon("polygon"::geometry)
ELSE
'POLYGON EMPTY'
END) STORED;
演示: db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380411.html
標籤:sql PostgreSQL的 邮局 生成列
