Verwendung von COPY FROM STDIN in Postgres


14

Ich habe gerade angefangen, Postgres zu verwenden, und ich versuche, eine Beispiel-Datenbank zu erstellen, um deren Funktionen zu verstehen. Ich habe einige Skripte in pgfoundry.org gefunden. Ich verstehe die Befehle, da ich zuvor sowohl Oracle als auch MS-SQL verwendet habe, aber alle Skripte, die ich ausführe, geben Fehler zurück, wenn sie die Anweisung "COPY FROM" erreichen. Genauer gesagt wird der Fehler beim ersten Element ausgelöst, das in die angegebene Tabelle eingefügt werden soll.

Ich habe versucht, die Skripte sowohl als Abfragen als auch als pgScripts auszuführen, aber in beiden Fällen wird in der ersten Zeile nach COPY FROM eine Fehlermeldung angezeigt.

Ich benutze pgAdminIII und habe mit StackBuilder PostgreSQL 9.2.4.1 als DB-Treiber installiert. Vermisse ich eine grundlegende Konfiguration, die mich daran hindert, diesen Befehl auszuführen, oder habe ich einfach nicht verstanden, wie sie funktioniert?

EDIT:
Der Fehler ist:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

wo der text ist:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`

1
Willkommen bei dba.SE. Sie müssen die (wörtliche) Fehlermeldung mit einer solchen Frage einfügen. Wenn Ihr Gebietsschema nicht nicht Englisch ist, können Sie es in Ihrer Sitzung zurücksetzen, bevor Sie das Skript ausführen, um Standardfehlermeldungen in Englisch zu erhalten: SET lc_messages = CFühren Sie es einfach in Ihrem SQL-Editor-Fenster aus, das eine Sitzung "enthält".
Erwin Brandstetter

Danke, ich versuche herauszufinden, wie ich mein Gebietsschema ändere. Sobald ich herausgefunden habe, wie das geht, werde ich die Fehlermeldung einfügen.
Eugenio Laghi

1
Oh, ich vergaß Apostrophe: SET lc_messages = 'C'.
Erwin Brandstetter

Antworten:


10

pgScript ist eine lokale Skript-Erweiterung von pgAdmin, die Sie hier höchstwahrscheinlich nicht wollen.

pgAdmin ist eine grafische Benutzeroberfläche, keine Konsolenanwendung - es gibt keine, die stdinSie einfach verwenden könnten. Wenn Sie stdinIhre Inhalte streamen müssen, verwenden Sie psql, eine Konsolenanwendung, mit dem \copyMetabefehl von psql .

Wenn Sie eine Datei haben (was Sie offensichtlich tun), verwenden Sie einfach SQL COPYvon pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

Die Datei muss für den postgresSystembenutzer lesbar sein.

Weitere Informationen in dieser eng verwandten Anfrage finden Sie in der pgAdmin-Supportliste .


ok, meinst du ich sollte das script mit einer zeile wie: ausführen psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql? Außerdem versuche ich alles nur lokal. Ich habe gerade pgAdmin auf meinem Laptop installiert.
Eugenio Laghi

1
@EugenioLaghi: Nicht genau. psql -fwürde eine SQL-Skriptdatei ausführen. Sie scheinen mit einer umgehen Datendatei. Ich habe meine Antwort aktualisiert.
Erwin Brandstetter

VIELEN DANK! Am Anfang habe ich versucht, ein Skript auszuführen, aber jetzt habe ich zumindest herausgefunden, wie man Daten aus einer Datei kopiert! Gestern Abend war ich einfach zu müde, um zu verstehen .. :)
Eugenio Laghi

Wie stelle ich sicher, dass der postgres-Benutzer die Datei lesen kann? Ich habe das für die txt-Datei gemacht, auch für meinen Desktop (wo sich die Datei befindet), aber die Erlaubnis wird immer noch verweigert.

@Geo: Bitte starten Sie eine neue Frage, einschließlich der Postgres-Version, des Betriebssystems, in der sich die Datei befindet, des von Ihnen verwendeten wörtlichen Befehls und ggf. weiterer Informationen ...
Erwin Brandstetter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.