PostgreSQL

PostgreSQL Upsert pada Konflik

PostgreSQL Upsert pada Konflik
Ungkapan 'Upsert' diakui sebagai penggabungan dalam RDBMS. 'Upsert' berguna untuk memiliki PostgreSQL jika anda tidak mahu menangani kesalahan pelanggaran sekatan yang unik kerana entri berulang. Apabila anda menjalankan arahan UPDATE generik, penyesuaian yang diperlukan hanya akan berlaku jika rekod sesuai dengan standard perintah; jika tidak ada data tersebut, maka tidak ada yang berlaku. Apabila anda menambahkan baris baru ke meja, PostgreSQL akan mengemas kini baris jika ada sebelumnya, atau yang lain akan memasukkan baris baru jika baris tidak ada. Kata kunci SQL 'Upsert' menggabungkan perkataan "kemas kini" dan "sisipan."Artikel ini menunjukkan kepada anda bagaimana fungsi 'Upsert' PostgreSQL berfungsi, serta cara menggunakan fitur 'Upsert' untuk menambah atau mengemas kini maklumat jika baris yang disisipkan sudah ada dalam tabel.

Sintaks

Berikut adalah sintaks pertanyaan 'Upsert' ON CONFLICT.

>> INSERT INTO table_name (column_list) VALUSE (value_list) ON CONFLICT tindakan sasaran;

Lancarkan Shell Baris Perintah PostgreSQL

Untuk memulakan, lancarkan shell baris perintah PostgreSQL dari menu Aplikasi. Sambungkannya ke pelayan yang diperlukan. Masukkan nama pangkalan data yang ingin anda kerjakan. Untuk bekerja di port lain, taipkan nombor port dan nama pengguna yang ingin anda bekerjasama. Untuk meneruskan parameter lalai, tinggalkan spasi sebagaimana adanya dan tekan 'Enter' di setiap pilihan. Tambahkan kata laluan untuk nama pengguna yang dipilih, dan shell-command anda harus siap digunakan.

Contoh 1:

Sekarang, kita boleh memulakan dengan 'Upsert' dalam konflik. Katakan anda mempunyai jadual bertajuk 'orang' dalam pangkalan data yang dipilih dengan beberapa medan yang menunjukkan rekod orang yang berbeza. Catatan ini menunjukkan nama orang, usia mereka, dan bandar dan negara mereka. Jadual dipaparkan di bawah.

>> PILIH * DARI orang;

Penting untuk mengetahui bagaimana kesalahan atau konflik dapat timbul. Medan jadual 'id', yang juga merupakan kunci utama, mengandungi nilai dari 1 hingga 15. Apabila pengguna cuba memasukkan beberapa catatan pendua ke dalam jadual, konflik berlaku.

Mari kita cuba pernyataan INSERT berikut, memasukkan catatan ke dalam jadual 'orang'. Pertanyaan ini akan menyebabkan ralat kerana nilai '3' medan 'id' sudah ada dalam jadual.

>> INSERT INTO person (id, name, age, city, country) NILAI ('3', 'Habib', '45', 'Chakwal', 'Pakistan');

Contoh 2: Naik klausa dengan ON CONFLICT

Kami akan menggunakan klausa ON CONFLICT untuk mengelakkan pertanyaan INSERT yang menyebabkan ralat ini kerana memasukkan rekod pendua. Perintah ON CONFLICT hadir dengan dua frasa dengan penggunaan yang berbeza.

Contoh 3: Ditambah dengan Klausa TIDAK ADA

Dalam contoh ini, kita akan melihat klausa DO NOTHING. Klausa ini menjelaskan bahawa tidak ada operasi yang akan dilakukan atas kesalahan atau konflik. Dengan kata lain, klausa ini hanya akan mengelakkan konflik atau kesalahan.

Oleh itu, marilah kita mencuba perintah INSERT yang sama seperti yang kita gunakan sebelumnya untuk menambahkan catatan pendua ke jadual 'orang', dengan beberapa perubahan ditambahkan. Kami telah menambahkan klausa ON CONFLICT, bersama dengan pernyataan TIDAK ADA dalam klausa ini. Klausa ON CONFLICT telah digunakan pada lajur 'id' yang unik. Ini bermaksud, apabila pengguna cuba memasukkan nilai pendua ke ruangan 'id', ia akan mengelakkan konflik dan tidak melakukan apa-apa. Seperti yang anda lihat dalam gambar di bawah, ia tidak akan memasukkan rekod baru ke dalam jadual, juga tidak akan mengemas kini rekod sebelumnya.

>> INSERT INTO person (id, name, age, city, country) NILAI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PADA KONFLIK (id) TIDAK ADA;

Mari kita periksa jadual 'orang' sekali lagi untuk kesahihan. Seperti yang anda lihat dalam gambar di bawah, tidak ada perubahan yang dibuat pada jadual.

>> PILIH * DARI orang;

Contoh 2: Ditambah dengan Klausa DO

Seterusnya, kita akan melihat klausa ON CONFLICT dan DO. Seperti namanya, klausa ___ akan melakukan tindakan atas kesalahan atau konflik ketika nilai pendua dimasukkan ke dalam tabel. Kami akan menggunakan arahan sisipan yang sama seperti yang kami gunakan sebelumnya untuk memasukkan catatan pendua dalam jadual 'orang', dengan sedikit perubahan. Kami telah menambahkan klausa ON CONFLICT dengan klausa DO di dalamnya. Apabila pengguna cuba memasukkan nilai yang tidak unik ke lajur 'id', ia akan melakukan tindakan untuk mengelakkan konflik. Kami telah menggunakan klausa UPDATE setelah klausa DO, yang menunjukkan kemas kini data dalam jadual 'orang'. Kata kunci SET digunakan untuk menetapkan nilai lajur 'nama' ke nilai baru, 'Habib,' menggunakan kata kunci yang DIKECUALIKAN di mana 'id' adalah '3' pada masa sekarang. Sekiranya anda menjalankan pertanyaan berikut, anda akan melihat bahawa pertanyaan telah dilakukan.

>> MASUKKAN KE DALAM orang (id, nama, umur, bandar, negara) NILAI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PADA KONFLIK (id) LAKUKAN SET nama = DILARANG.nama;

Rekod jadual 'orang' mesti diambil untuk melihat perubahan pada pertanyaan di atas. Sekiranya anda menjalankan pertanyaan berikut di shell baris perintah, anda akan melihat output selanjutnya.

>> PILIH * DARI orang;

Seperti yang anda lihat dari output di bawah, nama orang tersebut telah dikemas kini menjadi 'Habib,' di mana 'id' adalah '3.'

Anda juga boleh mengemas kini rekod di lebih dari satu lajur dengan menggunakan kata kunci yang DIKECUALIKAN dalam klausa ON CONFLICT dari pertanyaan INSERT, seperti yang ditunjukkan di bawah.

>> MASUKKAN KE DALAM orang (id, nama, umur, bandar, negara) NILAI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PADA KONFLIK (id) LAKUKAN SET nama = DILARANG.nama, bandar = DIKECUALIKAN.bandar;

Perubahan ditunjukkan di bawah.

>> PILIH * DARI orang;

Kesimpulannya

Artikel ini menunjukkan kepada anda cara menggunakan PostgreSQL 'Upsert' dengan klausa ON CONFLICT, bersama dengan tindakan DO dan DO NOTHING. Setelah membaca artikel ini, kami harap anda lebih mudah memahami cara menggunakan PostgreSQL 'Upsert.'

Cara menangkap dan streaming sesi permainan anda di Linux
Pada masa lalu, bermain permainan hanya dianggap sebagai hobi, tetapi seiring dengan berjalannya waktu, industri permainan menyaksikan pertumbuhan yan...
Permainan Terbaik untuk Dimainkan dengan Penjejakan Tangan
Oculus Quest baru-baru ini memperkenalkan idea hebat penjejakan tangan tanpa pengawal. Dengan jumlah permainan dan aktiviti yang semakin meningkat yan...
Cara Menunjukkan Overlay OSD dalam Aplikasi dan Permainan Linux Skrin Penuh
Bermain permainan skrin penuh atau menggunakan aplikasi dalam mod skrin penuh bebas gangguan dapat memisahkan anda dari maklumat sistem yang relevan y...