sql >> Database >  >> RDS >> PostgreSQL

Converteer SQLITE SQL-dumpbestand naar POSTGRESQL

Je zou dat dumpbestand rechtstreeks in psql moeten kunnen invoeren :

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

Als je de id . wilt kolom in "auto increment" en wijzig vervolgens het type van "int" in "serial" in de regel voor het maken van tabellen. PostgreSQL zal dan een reeks aan die kolom koppelen, zodat INSERT's met NULL-id's automatisch de volgende beschikbare waarde krijgen. PostgreSQL herkent AUTOINCREMENT ook niet commando's, dus deze moeten worden verwijderd.

Controleer ook op datetime kolommen in het SQLite-schema en verander ze in timestamp voor PostgreSQL. (Met dank aan Clay voor het erop wijzen.)

Als je booleans in je SQLite hebt, dan zou je 1 . kunnen converteren en 0 naar 1::boolean en 0::boolean (respectievelijk) of u kunt de booleaanse kolom wijzigen in een geheel getal in de schemasectie van de dump en deze vervolgens handmatig herstellen in PostgreSQL na het importeren.

Als je BLOB's in je SQLite hebt, moet je het schema aanpassen om bytea te gebruiken . Je zult waarschijnlijk wat decode moeten mixen belt ook. Het schrijven van een quick'n'dirty kopieerapparaat in je favoriete taal is misschien makkelijker dan de SQL te manipuleren als je veel BLOB's moet verwerken.

Zoals gewoonlijk, als je externe sleutels hebt, wil je waarschijnlijk kijken naar set constraints all deferred om problemen met het bestellen van invoegingen te voorkomen, plaatst u de opdracht binnen het BEGIN/COMMIT-paar.

Met dank aan Nicolas Riley voor de boolean-, blob- en constraints-notities.

Als u ` . heeft op uw code, zoals gegenereerd door sommige SQLite3-clients, moet u ze verwijderen.

PostGRESQL herkent ook niet unsigned kolommen, dus misschien wilt u die weglaten of een op maat gemaakte beperking toevoegen, zoals deze:

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

Terwijl SQLite standaard null-waarden instelt op '' , PostgreSQL vereist dat ze worden ingesteld als NULL .

De syntaxis in het SQLite-dumpbestand lijkt grotendeels compatibel te zijn met PostgreSQL, dus u kunt een paar dingen patchen en doorvoeren naar psql . Het importeren van een grote stapel gegevens via SQL INSERT's kan even duren, maar het zal werken.



  1. Beste equivalent voor IsInteger in SQL Server

  2. Foutcode:2013. Verbinding met MySQL-server verbroken tijdens zoekopdracht

  3. Postgres - Functie om het snijpunt van 2 ARRAY's te retourneren?

  4. .NET Core 2.1 Identity krijgt alle gebruikers met hun bijbehorende rollen