Import von SQL-Dumps (Mac)

Hallo Zusammen,
nachdem ich nun PostgreSQL installiert habe (nicht ganz schmerzfrei) :slight_smile:
Jetzt würde ich gern eine DB aus MySQL-Workbench (DB mit einer Tabelle) nach PostgreSQL (pgAdmin 4) exportieren. Habe einen Dump gemacht aus Workbench nur Struktur mal. Die DB in pgAdmin angelegt und dann einen Import gemacht. Erste Fehlermeldung alle Feldnamen waren in gesetzt damit kommt er schon scheint's nicht zurecht. Dann habe ich die überall entfernt. Jetzt stört ihn als nächstes die
AUTO_INCREMENT Anweisung:

CREATE TABLE IF NOT EXISTS MyPrivatDB.tbl_privat (
id INT NOT NULL AUTO_INCREMENT,
buchungstag DATE NULL DEFAULT NULL,
buchungstext TEXT NULL DEFAULT NULL,
auftraggeber TEXT NULL DEFAULT NULL,
verwendungszweck TEXT NULL DEFAULT NULL,
kategorie TEXT NULL DEFAULT NULL,
iban TEXT NULL DEFAULT NULL,
bic TEXT NULL DEFAULT NULL,
umsatz DECIMAL(10,2) NULL DEFAULT NULL,
U_1 TEXT NULL DEFAULT NULL,
shu TEXT NULL DEFAULT NULL,
PRIMARY KEY (id))
DEFAULT CHARACTER SET = utf8;
SET FOREIGN_KEY_CHECKS = 1;

ERROR: syntax error at or near “AUTO_INCREMENT”
LINE 2: id INT NOT NULL AUTO_INCREMENT,

  •                      ^*
    

SQL state: 42601
Character: 70

Hat jemand eine Idee.

Nimm identity:

CREATE TABLE IF NOT EXISTS tbl_privat 
(
  id int not null generated always as identity,
  buchungstag date null default null,
  buchungstext text null default null,
  auftraggeber text null default null,
  verwendungszweck text null default null,
  kategorie text null default null,
  iban text null default null,
  bic text null default null,
  umsatz decimal(10,2) null default null,
  u_1 text null default null,
  shu text null default null,
  primary key (id)
);

Weitere Details sind im Handbuch zu finden

Noch zwei Bemerkungen:

Was MySQL großspurig als “database” bezeichnet ist im Übrigen eigentlich ein Schema. Also solltest Du in Postgres auch Schemata anlegen für die Datenbanken die Du in MySQL hattest (keine “Postgres Datenbanken”)

Das ist natürlich stark persönlicher Geschmack, aber das Präfix “tbl_” vor dem Namen einer Tabelle ist (meiner Meinung nach) ziemlicher Unsinn. Beim Programmieren fangen ja auch nicht alle Klassenname mit Class_ an, oder? Kleine Lektüre dazu

1 „Gefällt mir“

Das ging aber schnell danke erstmal.
In dem Fall ist SQL nicht gleich SQL. Ich find’s ätzend das jeder seine eigene SQL-Sprache verwendet.
Bewege mich noch nicht sehr lange auf den Datenbankpfaden.

Im Moment bin ich am suchen nach der optimalsten DB-Version (phpmyadmin, MySQL-Workbench und nun schau ich mal nach PostgreSQL)

Ich bin mir nicht sicher. Ist es sinnvoller eine Postgre-DB/Tabelle anzulegen und dann die Daten zu importieren, als das man ein MYSQL-Schema anlegt? Die Datenmenge ist nicht so groß etwa 6000 Datensätze.

bzgl. Präfix ist wirklich Geschmacksache

Mal so als Hinweis: PostgreSQL ist extrem flexibel und erweiterbar. In Deiner Tabelle hast Du z.B. ein IBAN-Feld als Text.

Es gibt eine Extension, die einen IBAN-Datentyp zur Verfügung stellt. Dieser validiert eine eingegebene IBAN.

IBAN-Extension

Im Moment wäre mir mal wichtig die Daten aus Workbench oder phpmyadmin in PostgreSQL zu importieren. Welcher weg wäre denn dafür der beste? Auch im Zusammenhang mit der Antwort von castorp. Das man beim Import ein MySQL-Schema anlegen soll/muß.

Ein Schema erstellst Du im PostgreSQL via CREATE SCHEMA:

Command:     CREATE SCHEMA
Description: define a new schema
Syntax:
CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification

where role_specification can be:

    user_name
  | CURRENT_USER
  | SESSION_USER

URL: https://www.postgresql.org/docs/12/sql-createschema.html

Du kannst versuchen, die Daten aus MySQL in eine CSV-Datei zu packen und in PG via COPY dann einzulesen.

Um den vorgenannten Varianten der Migration noch eine hinzuzufügen:
Du könnten die Datenbank als Foreign Schema einbinden und dann per select into oder insert … select … from… die Daten in eine neue Tabelle schreiben.
Insgesamt ist Postgres so mit das flexbelste was mir untergekommen ist. Du könntest auch DBeaver zur Migration nutzen, da hatte ich neulich sogar eine Access-‘Datenbank’ sehr schnell nach Postgres portiert.
Gruß Uwe

1 „Gefällt mir“

In dem Fall ist SQL nicht gleich SQL. Ich find’s ätzend das jeder seine eigene SQL-Sprache verwendet.

Und mit MySQL hast Du ausgerechnet mit der Datenbank angefangen, die am weitesten vom Standard weg ist.

Wenn Du einen MySQL Dump hast, dann ist doch mit der Umstellung des CREATE TABLE schon mal der wichtigste Schritt geschafft.

Wenn ich das richtig im Kopf haben, enthält der MySQL Dump relativ “normale” INSERT Statements. Da sollte es reichen Suchen & Ersetzen die dämlichen “backticks” (das ` Zeichen) einfach zu entfernen. Das sollte sich recht gut automatisieren lassen.

Auch im Zusammenhang mit der Antwort von castorp. Das man beim Import ein MySQL-Schema anlegen soll/muß.

Nein, muß oder soll man gar nicht. Ich wollte nur daraufhinweisen, dass die Terminologie eine andere ist zwischen den Datenbanksystemen. Letztendlich kannst Du das aber ganz sein lassen und den “USE” Befehl entfernen und bei allen Referenzen auf die Tabelle das Präfix einfach weglassen.

Danke mal für die rege Informationsbereitschaft. Hat man nicht in alle Foren so.

Den Import hab ich bereits realisiert. CREATE TABLE und Import der Daten über csv. Kenn ich schon von den anderen DB-Systemen. Das Problem ist immer gleich. Mach ich einen Datenexport ins csv werden alle integer Felder deren Wert einem Datum ähnelt in selbiges umgewandelt (12.3 -> 12. März). Man kann im Excel das dann zwar wieder anpassen, aber beim nächsten verlassen des csv und wieder öffnen is wieder umgestellt.

Hab noch 2 Sachen die mich interessieren.

  1. Bei mir tauchen immer 2 Server auf PostgreSQL 10 und PostgreSQL 12 die sich zwar löschen lassen über das pgAdmin aber beim Neustart wieder da sind. Die sind ja vermutlich nicht Systemrelevant. Wie bekommt man die weg?

  2. Workbench hat eine recht gute Möglichkeit EER Diagramme zu verwenden. Gibt es sowas auch irgendwie für den pgAdmin. Was es übrigens auch für phpmyadmin gibt.