Saya memiliki dua tabel di PostGIS, satu titik dan satu tabel point_buffer. Tabel titik memiliki bidang buffer_distance, dengan nilai default katakan 200. Sekarang saya ingin mengubah geometri tabel buffer setiap kali saya mengubah nilai buffer_distance di tabel titik saya. Saya bisa melakukan ini untuk satu baris di tabel point_buffer saya menggunakan yang berikut:
UPDATE point_buffer
SET the_geom = (SELECT ST_Buffer(the_geom,500) FROM point WHERE gid = 1)
FROM point
WHERE point.gid = point_buffer.gid
Tetapi setiap kali saya mencoba mengubah seluruh tabel point_buffer (menjatuhkan klausa WHERE di sub-kueri saya), saya menerima pesan kesalahan:
'ERROR: lebih dari satu baris dikembalikan oleh subquery yang digunakan sebagai ekspresi'.
Pertanyaan saya adalah, dapatkah saya mengubah seluruh tabel point_buffer sekaligus? Saya tahu satu opsi menggunakan for lopp, dengan batas atas menjadi nilai hitungan tabel titik saya dan menambah nilai point.gid. Tetapi saya ingin melakukan ini dalam SQL sederhana .
sumber
Anda dapat menggunakan tampilan, tetapi Anda juga dapat menggunakan pemicu untuk secara otomatis memperbarui tabel buffer Anda ketika Anda memodifikasi tabel titik asli. Ini sangat berguna jika Anda tidak ingin membuat ulang buffer setiap kali Anda melihat tabel Anda, karena perhitungan buffer adalah tugas intensif CPU.
Berikut ini adalah contoh kode lengkap yang mengimplementasikannya: tabel titik dan tabel point_buffer yang diperbarui secara otomatis berdasarkan modifikasi tabel titik.
Anda dapat mengujinya dengan QGIS: buka kedua tabel, masukkan mode edit pada tabel titik. Memindahkan titik atau mengubah nilai buffer_distance, dan setiap kali Anda menyimpan, lapisan buffer akan diperbarui.
Nikmati :)
sumber