PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie fügt man in PostgreSQL Daten mit dem COPY-Befehl ein?

COPY tbl FROM STDIN;

wird von pgAdmin nicht unterstützt.
Sie erhalten einen einfachen Syntaxfehler, da Postgres die Daten als SQL-Code erhält.

Vier mögliche Lösungen:

1. Verwenden Sie ein mehrzeiliges INSERT stattdessen:

INSERT INTO beer(name, tags, alcohol, brewery, id, brewery_id, image)
VALUES 
  ('Bons Voeux', 'blonde', 9.5, 'Brasserie Dupont', 250, 130, 'generic.png')
, ('Boerke Blond', 'blonde', 6.8, 'Brouwerij Angerik', 233, 287 'generic.png')
;

Beachten Sie die unterschiedliche (SQL-)Syntax für Werte als Zeichenfolge oder numerische Literale.

Sie können die Daten mit pg_dump generieren mit --inserts . Verwandte:

  • Exportieren Sie bestimmte Zeilen aus einer PostgreSQL-Tabelle als INSERT-SQL-Skript

2. Oder rufen Sie Ihr Skript auf der Kommandozeile mit psql auf . Als Systembenutzer postgres :

psql -f beer.sql -U my_login_role -d db_name 

Datenbank (-d ) und Anmelderolle (-U für "Benutzer") kann weggelassen werden, wenn die Voreinstellungen ok sind. Syntaxbeispiele:

  • Erstellen Sie eine Postgres-Datenbank mithilfe einer Stapeldatei mit [Vorlage], [Codierung], [Eigentümer] und einer .sql-Datei

Stellen Sie sicher, dass eine Datenende-Markierung vorhanden ist (\. ) für standardmäßigen text Format. (Das hast du.) Das Handbuch:

Das Datenende kann durch eine einzelne Zeile dargestellt werden, die nur einen Backslash-Punkt enthält (\. ). Eine Datenende-Markierung ist beim Lesen aus einer Datei nicht erforderlich, da das Dateiende perfekt funktioniert; Es wird nur benötigt, wenn Daten mit einem Client-Protokoll vor Version 3.0 zu oder von Client-Anwendungen kopiert werden.

3. Oder verschieben Sie Ihre Daten in eine separate Datei auf dem Server , sagen Sie 'beer_data.csv' und verwenden Sie COPY .. FROM 'filename' in Ihrem Skript:

COPY beer (name, tags, alcohol, brewery, id, brewery_id, image)
FROM '/path/to/beer_data.csv';

Was so oder so funktioniert. Sie benötigen jedoch Superuser-Rechte. Das Handbuch:

[...] COPY Das Benennen einer Datei oder eines Befehls ist nur Datenbank-Superusers oder Benutzern erlaubt, denen eine der Standardrollen pg_read_server_files gewährt wird , pg_write_server_files , oderpg_execute_server_program , da es erlaubt, jede Datei zu lesen oder zu schreiben oder ein Programm auszuführen, auf das der Server Zugriffsrechte hat.

(pg_read_server_files , pg_write_server_files und pg_execute_server_program sind neu in Postgres 11.)

4. Oder lesen Sie eine lokale Datei auf dem Client mit dem psql-Metabefehl \copy . Siehe:

  • Wie aktualisiere ich ausgewählte Zeilen mit Werten aus einer CSV-Datei in Postgres?
  • Verwendung von \copy in postgresql mit pgadmin4