Ketika saya memasukkan elemen (fitur) baru di lapisan Postgres lain, saya bisa melakukannya dengan dua cara:
- Menggambar elemen baru (dengan 'Tambahkan fitur') yang jarang saya lakukan atau
- Menyalin (atau memotong) beberapa elemen dari layer Postgre lain (Source layer), dan menempelkannya ke layer target yang sering saya lakukan
Pada contoh pertama, penghematan hasil edit berjalan normal karena layer ini mendapatkan gid dari urutan basis data postgre * nextval ('layer_name_gid_seq' :: regclass) *
Dalam contoh kedua, saya mendapat kesalahan saat menyimpan suntingan, karena saat menyalin elemen dari lapisan sumber ke lapisan target qgis menyalin gid elemen dari lapisan sumber. Saat mencoba menyimpan hasil edit, kesalahan ini dikembalikan:
Tidak dapat melakukan perubahan pada layer „Cjevovodi“
Kesalahan: ERROR: 1 fitur tidak ditambahkan.
Kesalahan penyedia:
Kesalahan PostGIS saat menambahkan fitur: ERROR: nilai kunci duplikat melanggar batasan unik "cjevovodi_okill_pkey"
DETAIL: Kunci (gid) = (5) sudah ada.
Saya mencoba untuk menyalin * nextval ('layer_name_gid_seq' :: regclass) * di bidang gid, tetapi urutan ini tidak dapat disisipkan di bidang gid karena bidang didefinisikan sebagai numerik.
Adakah yang tahu cara sederhana untuk menyalin elemen dari layer sumber (dengan gid yang ada) menetapkan gid baru?
Terima kasih!
Jawaban:
Saya tidak dapat mereproduksi ini di QGIS 2.2 Windows, c3a2817.
Jika versi lain berperilaku berbeda, atau jika Anda terus memiliki masalah ini, Anda mungkin dapat mengatur pemicu PostgreSQL di atas meja sebagai solusi:
Menggunakan tabel contoh ini:
Berikut adalah fungsi pemicu yang akan menetapkan yang baru di
gid
mana diperlukan:Mengikat fungsi ke meja ...
Ini secara otomatis akan menetapkan ID baru di mana yang
gid
sudah ada. Misalnya, kueri berikut sekarang akan menduplikasi semua data dalam tabel alih-alih gagal:Tentu saja, pendekatan ini dapat membahayakan maksud kunci utama Anda, jadi gunakan dengan hati-hati.
sumber
Pilih fitur dari lapisan sumber dan simpan yang dipilih (Simpan dipilih sebagai ...) di shapefile. Tambahkan shapefile yang disimpan dalam proyek QGIS dan buka tabel atribut, lalu hapus bidang "gid" dan simpan shapefile. Pilih fitur di shapefile dan salin di lapisan kerja Anda.
sumber