PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Ustaw SQLAlchemy, aby używał PostgreSQL SERIAL do generowania tożsamości

Twój PRIMARY KEY należy zdefiniować tak, aby używał SEQUENCE jako DEFAULT , albo przez SERIAL pseudo-typ wygody:

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

lub jawna SEQUENCE :

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;

Jest to omówione w dokumentacji SQLAlchemy .

Możesz dodać to do istniejącej tabeli:

CREATE SEQUENCE blah_id_seq OWNED BY blah.id;

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

jeśli wolisz przywrócić zrzut, dodaj sekwencje ręcznie.

Jeśli istnieją dane, które załadowałeś bezpośrednio do tabel za pomocą COPY lub podobny, musisz ustawić punkt początkowy sekwencji:

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

Powiedziałbym, że problem może dotyczyć programowania w SQLite, a następnie wykonania zrzutu i przywrócenia tego zrzutu do PostgreSQL. SQLAlchemy spodziewa się stworzyć sam schemat z odpowiednimi wartościami domyślnymi i sekwencjami.

Zamiast tego zalecam, aby SQLAlchemy utworzył nową, pustą bazę danych. Zrzuć dane dla każdej tabeli z bazy danych SQLite do CSV, a następnie COPY te dane do tabel PostgreSQL. Na koniec zaktualizuj sekwencje za pomocą setval więc generują odpowiednie wartości.

Tak czy inaczej będziesz potrzebować aby upewnić się, że tworzone są odpowiednie sekwencje. Możesz to zrobić przez SERIAL typy pseudokolumn lub ręcznie SEQUENCE tworzenie i DEFAULT ustawienie, ale musisz to zrobić. W przeciwnym razie nie ma możliwości przypisania wygenerowanego identyfikatora do tabeli w wydajny i bezpieczny dla współbieżności sposób.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę utworzyć ograniczenie, aby sprawdzić, czy wiadomość e-mail jest ważna w postgresie?

  2. nie można połączyć się z hostingiem bazy danych pg na Heroku

  3. Nie można skonfigurować AspNet.Identity przy użyciu PostgreSQL

  4. Czy można skondensować klucz podstawowy/numer seryjny?

  5. grupuj według przedziału cenowego