PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres - Bagaimana cara memanggil ST_SetSRID(ST_MakePoint(lng, lat), 4326) secara otomatis pada sisipan?

Anda dapat melakukan ini dengan menggunakan pemicu. Panggilan penyisipan Anda tidak akan berurusan dengan geometri, hanya dengan bidang non-spasial dan bujur lintang lainnya, dan fungsi pemicu akan membuat geometri. Jangan lupa untuk melakukan hal yang sama saat memperbarui baris. Perhatikan bahwa saya telah membuat hard-code SRID karena tidak mungkin untuk melewatkan parameter dinamis ekstra ke fungsi pemicu. Jika perlu, tambahkan bidang ke tabel Anda untuk menampung nilai ini dan Anda dapat menyebutnya sebagai new.srid

CREATE OR REPLACE FUNCTION markers_geog_tg_fn() RETURNS trigger AS
$BODY$BEGIN
  IF TG_OP = 'INSERT' AND (NEW.lat ISNULL or NEW.lng ISNULL  ) THEN
    RETURN NEW; -- no  geometry
  ELSIF TG_OP = 'UPDATE' THEN
    --Lat Long updated to null, erase geometry
    IF NEW.lat ISNULL or NEW.lng ISNULL THEN
        NEW.geography = NULL;
    END IF;

    IF NEW.lat IS NOT DISTINCT FROM OLD.lat and NEW.lng IS NOT DISTINCT FROM OLD.lng THEN
      RETURN NEW; -- same old geometry
    END IF;
  END IF;
  -- Attempt to transform a geometry
  BEGIN
    NEW.geography := ST_SetSRID(ST_MakePoint(NEW.lng::decimal, NEW.lat::decimal), 4326))
  EXCEPTION WHEN SQLSTATE 'XX000' THEN
    RAISE WARNING 'geography  not updated: %', SQLERRM;
  END;
  RETURN NEW;
END;$BODY$ LANGUAGE plpgsql;

CREATE TRIGGER markers_geog_tg BEFORE INSERT OR UPDATE
   ON markers FOR EACH ROW
   EXECUTE PROCEDURE markers_geog_tg_fn();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Beberapa kunci utama untuk tabel app_employee tidak diperbolehkan.

  2. Apa perbedaan antara postgres dan postgresql_psycopg2 sebagai mesin basis data untuk Django?

  3. SQLAlchemy:Periksa apakah nilai yang diberikan ada dalam daftar

  4. Tidak dapat terhubung ke database Postgres dengan tumpukan Bitnami Django

  5. Tidak ada hasil yang dikembalikan oleh kesalahan Kueri di PostgreSQL