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

Setel SQLAlchemy untuk menggunakan PostgreSQL SERIAL untuk pembuatan identitas

PRIMARY KEY harus didefinisikan menggunakan SEQUENCE sebagai DEFAULT , baik melalui SERIAL tipe pseudo kenyamanan:

CREATE TABLE blah (
    id serial primary key,
    ...
);

atau SEQUENCE yang eksplisit :

CREATE SEQUENCE blah_id_seq;

CREATE TABLE blah (
    id integer primary key default nextval('blah_id_seq'),
    ...
);

ALTER SEQUENCE blah_id_seq OWNED BY blah.id;

Ini dibahas dalam dokumentasi SQLAlchemy .

Anda dapat menambahkan ini ke tabel yang ada:

CREATE SEQUENCE blah_id_seq OWNED BY blah.id;

ALTER TABLE blah ALTER COLUMN id SET DEFAULT nextval('blah_id_seq');

jika Anda lebih suka memulihkan dump, tambahkan urutan secara manual.

Jika ada data yang Anda muat langsung ke tabel dengan COPY atau serupa, Anda perlu mengatur urutan titik awal:

SELECT setval('blah_id_seq', max(id)+1) FROM blah;

Saya akan mengatakan masalahnya mungkin berkaitan dengan pengembangan Anda di SQLite, kemudian melakukan dump dan memulihkan dump itu ke PostgreSQL. SQLAlchemy mengharapkan untuk membuat skema sendiri dengan default dan urutan yang sesuai.

Yang saya sarankan Anda lakukan adalah membuat SQLAlchemy membuat database baru yang kosong. Buang data untuk setiap tabel dari SQLite DB ke CSV, lalu COPY data itu ke dalam tabel PostgreSQL. Terakhir, perbarui urutannya dengan setval sehingga mereka menghasilkan nilai yang sesuai.

Dengan satu atau lain cara, Anda akan membutuhkan untuk memastikan bahwa urutan yang sesuai dibuat. Anda dapat melakukannya dengan SERIAL jenis pseudo-kolom, atau dengan SEQUENCE manual pembuatan dan DEFAULT pengaturan, tetapi Anda harus melakukannya. Jika tidak, tidak ada cara untuk menetapkan ID yang dihasilkan ke tabel dengan cara yang efisien dan aman secara serentak.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan beberapa pernyataan WITH dalam satu kueri PostgreSQL?

  2. Bagaimana cara mengekstrak tahun dan bulan dari tanggal di PostgreSQL tanpa menggunakan fungsi to_char()?

  3. Apa pro dan kontra melakukan perhitungan dalam sql vs. di aplikasi Anda?

  4. Bagaimana cara mendapatkan database dan nama pengguna saat ini dengan `select` di PostgreSQL?

  5. Bisakah saya menggunakan PENGECUALIAN dalam FOR LOOP untuk memaksa kelanjutan pada kesalahan?