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

Masukkan ke dalam postgres SQL

Jangan lakukan itu! PERNAH ! Jangan pernah berpikir untuk melakukan itu!

Ini SALAH solusi tampaknya (tidak) bekerja untuk Anda:

INSERT INTO lists VALUES ((SELECT max(id)+1 FROM lists),'KO','SPH', '5');

TAPI , jika seseorang mencoba memasukkan pada saat yang sama dengan Anda, Anda berdua akan mendapatkan id yang sama , yang akan menyebabkan hasil yang tidak valid. Anda benar-benar harus menggunakan sequence atau beberapa mekanisme yang lebih andal (tabel bantu adalah umum ketika Anda tidak dapat memiliki lubang dalam urutan, tetapi memiliki beberapa kelemahan [itu akan mengunci]). Anda bahkan dapat menggunakan serial tipe data untuk membuatnya lebih mudah (membuat urutan di bawahnya):

CREATE TABLE lists(id serial, col2 text, col3 text, ...);
-- If you don't specify "id", it will autogenerate for you:
INSERT INTO lists(col2, col3, ...) VALUES('KO','SPH', ...);
-- You can also specify using DEFAULT (the same as above):
INSERT INTO lists(id, col2, col3, ...) VALUES(DEFAULT, 'KO','SPH', ...);

Jika Anda benar-benar, BENAR-BENAR, tidak dapat membuat dan menggunakan urutan, Anda dapat melakukan seperti di atas, tetapi Anda harus menangani pengecualian (dengan asumsi id bidangnya adalah PK atau UK, dan menggunakan transaksi berkomitmen baca), sesuatu seperti itu (dalam PL/pgSQL):

DECLARE
    inserted bool = false;
BEGIN
    WHILE NOT inserted LOOP;
        BEGIN
            INSERT INTO lists
            VALUES ((SELECT coalesce(max(id),0)+1 FROM lists),'KO','SPH', '5');
            inserted = true;
        EXCEPTION
            WHEN unique_violation THEN
                NULL; -- do nothing, just try again
        END;
    END LOOP;
END;

Tapi sekali lagi, saya sangat menyarankan Anda untuk menghindarinya:gunakan urutan dan bahagia... =D

Juga, saya tahu ini adalah contoh, tetapi gunakan daftar kolom eksplisit di INSERT INTO klausa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. menyimpan objek python di tabel postgres dengan acar

  2. Cara yang tepat untuk menambahkan teks yang tidak lolos dari bidang ke regex di postgres?

  3. Bagaimana cara memasukkan ke dalam tabel dari tabel lain dengan mencocokkan nilai?

  4. migrasi dari sqlite ke postgresql di Django

  5. Cegah drop table jika kondisi tidak terpenuhi