2016-06-13 3 views
0

Ich mag eine Tabelle in eine Datei kopieren i PostGreSQLPostgres: Ich versuche, eine Tabelle in eine Datei zu kopieren, es zeigt „Zugriff verweigert“

ich diese Abfrage versucht

COPY demo TO '/home/rck/Desktop/trial.csv' 

Aber es zeigt Erlaubnis

verweigert

ich habe auch versucht \ kopieren, aber es zeigt Syntaxfehler

\COPY demo TO '/home/rck/Desktop/trial.csv' 

Der Fehler ist

"ERROR: Syntaxfehler bei oder in der Nähe von "\" Zeile 1: \ COPY Demo‚/home/rck/Desktop/trial.csv

I auch versucht, diesen Befehl in Terminal

chmod a+rX /home/rck/ /home/rck/desktop /users/rck/desktop/trial.csv 

Aber es zeigt immer noch den gleichen Fehler.

Kann ich die Lösung kennen, wie man eine Postgres-Tabelle in eine Datei kopiert?

Danke

+0

Sie Sind Sicher haben Sie diese Befehle von psql mit den Flags -u und -d ausgeführt, um als Benutzer mit den erforderlichen Berechtigungen verbunden zu werden? Der Befehl \ copy sollte funktionieren. – Murphy4

+0

Ich bin neu auf postgresql. Wie kann ich das machen? Ich bin auch ein Superuser in Postgresql –

Antwort

0

COPY demo TO '/home/rck/Desktop/trial.csv' ist server Befehl ausführen zu sehen - sollte als Super-User und Berechtigungen ausgeführt werden, für den Benutzer gesetzt werden postgres auf Server Seite.

\COPY demo TO '/home/rck/Desktop/trial.csv' ist Client-Seite psql Befehl - von pgAdmin nicht ausgeführt werden kann, oder so ... und Berechtigungen entsprechend auf Dateipfad für den Benutzer Sie psql mit, nicht Postgres betrieben werden gewährt sollte ...

1

Sie möchten die folgenden Befehle ausführen. Ich würde empfehlen, sie in eine * .sql-Datei zu setzen und sie irgendwo im Projekt als Referenz zu speichern. Ändern Sie nach Belieben. Unter der Annahme aber, dass Sie in eine Datenbank und die Tabelle Demo erstellt haben, sind die Befehle, die Sie brauchen:

create user <demouser> with password '<password>'; 
grant all privileges on database demo_db to <demouser>; 

Dann können Sie Postgres mit dem psql Befehl starten. Je nach Betriebssystem ändern sich diese geringfügig. Für Windows gibt es einen -u Befehl die Benutzer zu setzen, sondern auf Linux ist es mit sudo getan:

sudo -u <superusername> psql -d <demo_db>; 

wo, wenn Sie Standardwerte verwenden wahrscheinlich Postgres und ist die Datenbank, die Ihre Tabelle Demo hält.

Dann, nach diesem Befehl sollten Sie die Eingabeaufforderung

demouser=# 

So dann

\copy demo to 'filename'; 
+0

Dank für die Antwort funktioniert es gut. Ich führe diesen Befehl im Terminal in ubuntu aus. Ist das möglich, in Postgres oder pgadmin3 wie eine Abfrage auszuführen, weil ich dies als Auslöser festlegen möchte. Ist das möglich? –

+0

Es kann genau wie alles andere mit dem COPY-Befehl als Auslöser erfolgen. Aber aus der Dokumentation, Verwechseln Sie nicht COPY mit der psql Anweisung \ copy. \ copy ruft COPY FROM STDIN oder COPY TO STDOUT auf und lädt/speichert die Daten dann in einer Datei, auf die der psql-Client zugreifen kann. Daher hängen die Zugriffsrechte und Zugriffsrechte für Dateien vom Client und nicht vom Server ab, wenn \ copy verwendet wird. Sie müssen also den COPY-Befehl konfigurieren. Obwohl ich es nicht getestet habe, glaube ich, dass es möglich ist, den COPY-Befehl in einer Triggerfunktion zu verwenden, genau wie bei jedem anderen Trigger. – Murphy4

Verwandte Themen