PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Đặt SQLAlchemy để sử dụng PostgreSQL SERIAL để tạo danh tính

PRIMARY KEY của bạn nên được xác định để sử dụng SEQUENCE dưới dạng DEFAULT , qua SERIAL kiểu giả tiện lợi:

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

hoặc SEQUENCE rõ ràng :

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;

Đây là được thảo luận trong tài liệu SQLAlchemy .

Bạn có thể thêm cái này vào bảng hiện có:

CREATE SEQUENCE blah_id_seq OWNED BY blah.id;

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

nếu bạn muốn khôi phục kết xuất thì hãy thêm các trình tự theo cách thủ công.

Nếu có dữ liệu hiện có, bạn đã tải trực tiếp vào các bảng bằng COPY hoặc tương tự, bạn cần đặt điểm bắt đầu trình tự:

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

Tôi muốn nói rằng vấn đề có thể xảy ra với việc bạn đang phát triển trong SQLite, sau đó thực hiện kết xuất và khôi phục kết xuất đó vào PostgreSQL. SQLAlchemy dự kiến ​​sẽ tự tạo lược đồ với các giá trị mặc định và trình tự thích hợp.

Thay vào đó, những gì tôi khuyên bạn nên làm là sử dụng SQLAlchemy để tạo một cơ sở dữ liệu trống mới. Kết xuất dữ liệu cho từng bảng từ SQLite DB sang CSV, sau đó COPY dữ liệu đó vào các bảng PostgreSQL. Cuối cùng, cập nhật các trình tự bằng setval để chúng tạo ra các giá trị thích hợp.

Bằng cách này hay cách khác, bạn sẽ cần để đảm bảo rằng các trình tự thích hợp được tạo ra. Bạn có thể làm điều đó bằng SERIAL kiểu cột giả hoặc bằng SEQUENCE thủ công tạo và DEFAULT thiết lập, nhưng bạn phải làm điều đó. Nếu không, không có cách nào để gán một ID đã tạo cho bảng một cách hiệu quả, đồng thời và an toàn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LỖI:xóa trên bảng vi phạm ràng buộc khóa ngoại. Id khóa vẫn được tham chiếu từ bảng (nhiều)

  2. Cập nhật giá trị cột PostgreSQL

  3. Tôi có thể sử dụng Ecto để đăng nhập SQL thô không?

  4. Diễn giải kết quả từ phân tích giải thích trong Postgres

  5. Làm cách nào để bạn có được chế độ xem 12 ngày làm việc năng động trong Postgresql?