sql >> Databáze >  >> RDS >> PostgreSQL

Převeďte soubor výpisu SQLITE SQL na POSTGRESQL

Měli byste být schopni vložit tento soubor výpisu přímo do psql :

/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql

Pokud chcete id sloupec na "automatický přírůstek", pak změňte jeho typ z "int" na "sériový" v řádku vytváření tabulky. PostgreSQL pak k tomuto sloupci připojí sekvenci, takže INSERTům s NULL id bude automaticky přiřazena další dostupná hodnota. PostgreSQL také nerozpozná AUTOINCREMENT příkazy, takže je třeba je odstranit.

Budete také chtít zkontrolovat datetime sloupce ve schématu SQLite a změňte je na timestamp pro PostgreSQL. (Díky Clayovi za upozornění.)

Pokud máte ve svém SQLite booleany, můžete převést 1 a 0 na 1::boolean a 0::boolean (respektive) nebo můžete změnit booleovský sloupec na celé číslo v sekci schématu výpisu a poté je po importu ručně opravit v PostgreSQL.

Pokud máte ve svém SQLite objekty BLOB, budete chtít upravit schéma tak, aby používala bytea . Pravděpodobně budete muset přimíchat nějaké decode hovory také. Psaní rychlé a špinavé kopírky ve vašem oblíbeném jazyce může být snazší než mandlování SQL, pokud se však musíte vypořádat se spoustou objektů BLOB.

Jako obvykle, pokud máte cizí klíče, pravděpodobně se budete chtít podívat na set constraints all deferred abyste se vyhnuli problémům s řazením vložení, umístěte příkaz do dvojice BEGIN/COMMIT.

Děkujeme Nicolasi Rileymu za poznámky typu boolean, blob a omezení.

Pokud máte ` ve vašem kódu, který vygenerovali někteří klienti SQLite3, je musíte odstranit.

PostGRESQL také nerozpozná unsigned sloupce, takže to možná budete chtít vypustit nebo přidat vlastní omezení, jako je toto:

CREATE TABLE tablename (
    ...
    unsigned_column_name integer CHECK (unsigned_column_name > 0)
);

Zatímco SQLite výchozí hodnoty null na '' , PostgreSQL vyžaduje, aby byly nastaveny jako NULL .

Syntaxe v souboru výpisu SQLite se zdá být většinou kompatibilní s PostgreSQL, takže můžete opravit pár věcí a přidat je do psql . Import velké hromady dat přes SQL INSERT může chvíli trvat, ale bude fungovat.



  1. Oracle:Pokud tabulka existuje

  2. Jaký je rozdíl mezi Float a Numeric/Decimal na SQL Server - SQL Server / T-SQL výukový program, část 33

  3. Překlad Microsoft T-SQL do Oracle SQL

  4. Předání pole dat jako vstupního parametru proceduře Oracle