किसी मौजूदा तालिका में एक स्तंभ जोड़ने के लिए, ALTER TABLE DDL का उपयोग करें , जैसे:
ALTER TABLE my_table
ADD COLUMN the_geom_mercator
geometry(Geometry,3857);
जिनका उपयोग करके दूसरे कॉलम (the_geom) से पॉप्युलेट किया जा सकता है:
UPDATE my_table SET
the_geom_mercator = ST_Transform(the_geom, 3857)
FROM spatial_ref_sys
WHERE ST_SRID(the_geom) = srid;
(तीसरी पंक्ति FROM spatial_ref_sys ...
आवश्यक नहीं है, लेकिन यह अज्ञात या अमान्य अनुमानों के साथ प्रयासों को बदल देती है, जो त्रुटियां बढ़ाती हैं)।
और अगर इस तालिका को बनाए रखा जाना है (जोड़ा / अद्यतन), तो आप the_geom_mercintline को अपडेट करने के लिए ट्रिगर फ़ंक्शन का उपयोग कर सकते हैं, जैसे:
CREATE OR REPLACE FUNCTION my_table_tg_fn() RETURNS trigger AS
$BODY$BEGIN
IF TG_OP = 'INSERT' AND NEW.the_geom ISNULL THEN
RETURN NEW; -- no new geometry
ELSIF TG_OP = 'UPDATE' THEN
IF NEW.the_geom IS NOT DISTINCT FROM OLD.the_geom THEN
RETURN NEW; -- same old geometry
END IF;
END IF;
-- Attempt to transform a geometry
BEGIN
NEW.the_geom_mercator := ST_Transform(NEW.the_geom, 3857);
EXCEPTION WHEN SQLSTATE 'XX000' THEN
RAISE WARNING 'the_geom_mercator not updated: %', SQLERRM;
END;
RETURN NEW;
END;$BODY$ LANGUAGE plpgsql;
CREATE TRIGGER my_table_tg BEFORE INSERT OR UPDATE
ON my_table FOR EACH ROW
EXECUTE PROCEDURE my_table_tg_fn();
ध्यान दें कि ST_Transform त्रुटियों को फंसाना चाहिए और एक चेतावनी दिखाना चाहिए, जैसे:
postgis=# INSERT INTO my_table(the_geom)
postgis-# VALUES (ST_SetSRID(ST_MakePoint(0,1), 123))
postgis-# RETURNING the_geom, the_geom_mercator;
WARNING: the_geom_mercator not updated: GetProj4StringSPI: Cannot find SRID (123) in spatial_ref_sys
-[ RECORD 1 ]-----+---------------------------------------------------
the_geom | 01010000207B0000000000000000000000000000000000F03F
the_geom_mercator |
INSERT 0 1