Adakah yang bisa membantu saya membuat skrip pemrosesan QGIS yang menambahkan urutan ke kolom pengidentifikasi unik yang ada (ketik: integer) di PostGIS?
Ini akan sangat membantu, misalnya sebagai solusi untuk bug # 6798 . Sayangnya, saya tidak punya pengalaman Python.
CREATE SEQUENCE /*input_schema*/./*input_table*/_/*uic*/_seq OWNED BY /*input_schema*/./*input_table*/./*uic*/;
SELECT SETVAL('/*input_schema*/./*input_table*/_/*uic*/_seq', (SELECT MAX(/*uic*/) FROM /*input_schema*/./*input_table*/));
ALTER TABLE /*input_schema*/./*input_table*/
ALTER COLUMN /*uic*/ SET DEFAULT nextval('/*input_schema*/./*input_table*/_/*uic*/_seq'::regclass);
postgis
pyqgis
qgis-processing
serial
eclipsed_by_the_moon
sumber
sumber
Jawaban:
Perlu dicatat, bahwa modul python
psycopg2
sepertinya tidak secara otomatisCOMMIT
melakukan transaksi (seperti yang dilakukan klien lain seperti QGIS DB Manager atau pgAdmin), oleh karena ituCOMMIT
pernyataan tersebut harus menjadi bagian darisql
string dalam skrip.Ini tidak masalah dengan
SELECT
pernyataan karena dalam kasusCOMMIT
ini jelas dilakukan ketika mendapatkan hasil melaluicur.fetchall()
.Ini adalah versi ulang skrip dari jawaban saya di atas:
sumber
Asalkan pernyataan SQL Anda menghasilkan hasil yang valid, skrip di bawah ini harus melakukan apa yang Anda cari. Sayangnya saya tidak punya apa-apa untuk menguji ini, tetapi Anda bisa mencoba dan memberikan umpan balik.
Saya mencoba berkomentar untuk kenyamanan, pada dasarnya skrip melakukan tiga langkah:
Perhatikan output protokol skrip.
sumber
unexpected indent (, line 32) See log for more details
. Apakah ada yang salah yang saya lakukan? Pernyataan SQL bekerja di DB-Manager.File "C:/Users/abc/.qgis2/python/plugins\processing\core\GeoAlgorithm.py", line 230, in execute self.processAlgorithm(progress) File "C:/Users/abc/.qgis2/python/plugins\processing\script\ScriptAlgorithm.py", line 298, in processAlgorithm exec((script), ns) File "<string>", line 32 try: ^
try
pernyataan memiliki lekukan yang salah. Baru saja perbaiki ini.Traceback (most recent call last): File "C:/Users/abc/.qgis2/python/plugins\processing\gui\AlgorithmDialog.py", line 219, in accept if runalg(self.alg, self): File "C:/Users/abc/.qgis2/python/plugins\processing\gui\AlgorithmExecutor.py", line 51, in runalg alg.execute(progress) File "C:/Users/abc/.qgis2/python/plugins\processing\core\GeoAlgorithm.py", line 244, in execute unicode(e) + self.tr('\nSee log for more details')) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 44: ordinal not in range(128)
Tampaknya sudah ada plugin serupa (meskipun itu menciptakan bidang ID unik baru untuk Anda, daripada membuat urutan.)
Ini mengasumsikan Anda sudah memiliki bidang id unik (ini tidak harus berupa angka), tetapi sebaliknya menginginkan nomor numerik yang sederhana (1,2,3 ..)
Di Memproses kotak alat, buka Skrip> Alat> Dapatkan Skrip dari Online ...
Luaskan "Tidak diinstal" dan pilih "EquivalentNumField". Ingatlah untuk mengklik kotak centang sebelum mengklik OK. Itu membuat saya keluar ... ;-)
Untuk menemukannya dengan cepat, ketikkan "Equiv" di bilah pencarian pemrosesan, dan Anda harus dapat mengklik dua kali dari sana.
Ini sebuah contoh. Kayu-kayu ini memiliki bidang unik (osm_id) tetapi plugin telah menambahkan NUM_FIELD dengan nilai numerik sederhana sebagai gantinya
sumber