Ich verwende PGAdmin 1.14.3.
Wenn ich versuche, einen Importbefehl auszuführen:
COPY grad(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2, admin_name3, admin_code3, latitude, longitude, accuracy)
FROM 'C:\\Users\\denis\\Desktop\\BP2Project\\USA\\US.txt';
Ich bekomme ein
FEHLER: Datei konnte nicht geöffnet werden "C:\Users\denis\Desktop\BP2Project\USA\US.txt" zum Lesen: SQL-Status für Berechtigung verweigert: 42501
Ich habe andere ähnliche Fragen nachgesehen und keine von ihnen hat mein Problem gelöst.
Ich habe mich als Benutzer "postgres" angemeldet, der der Superuser ist. Ich sehe nicht, warum mir Berechtigungen fehlen. Ich bin unter Windows 7.
Der Benutzer Postgres
muss Lesezugriff auf die Datei haben, aus der Sie kopieren möchten.
In diesem Artikel erfahren Sie, wie Sie den Sicherheitszugriff für Dateien unter Windows ändern.
Der Zulassungsartikel , der in der Antwort von Houari und Flimzy erwähnt wird, ist ein gutes Nachschlagewerk, aber eine direkte Antwort (die von mir verwendete schnelle Lösung) ist
Everyone
in das Textfeld "Geben Sie die zu verwendenden Objektnamen ein" ein.Jetzt können Sie die SQL-Anweisung COPY ausführen, die auf diese Dateien zugreifen muss.
Everyone
aus.Die Berechtigungen wurden jetzt wieder so eingestellt, wie sie waren.
Ok, so funktioniert der COPY-Befehl, um eine Tabelle Schritt für Schritt in CSV zu exportieren .. __ Bitte beachten Sie, dass ich pgAdmin 111 verwende.
Klicken Sie mit der rechten Maustaste auf den Ordner mit den Datendateien, denen die Berechtigung verweigert wurde, und klicken Sie dann auf Eigenschaften.
Wählen Sie im Eigenschaftenfenster des Ordners die Registerkarte Sicherheit aus. Klicken Sie auf die Schaltfläche Bearbeiten.
Klicken Sie im Fenster "Berechtigungen für den Ordner" auf die Schaltfläche Hinzufügen ... _. Geben Sie "Everyone" in das Textfeld "Geben Sie die zu verwendenden Objektnamen ein" ein.
Klicken Sie auf OK und das Fenster wird geschlossen . Stellen Sie sicher, dass die Standardberechtigungen zum Lesen und Ausführen über das Kontrollkästchen> im vorherigen Fenster auf Zulassen gesetzt wurden. Klicken Sie auf OK und das Fenster wird geschlossen.
Klicken Sie im Fenster Ordnereigenschaften auf die Schaltfläche Übernehmen.
Dies ist der knifflige Teil. Erstellen Sie im Ordner myExports eine leere CSV-Datei mit dem gewünschten Namen.E.g employee.csv
Führen Sie dann den Befehl Kopieren wie folgt aus:
angestellten kopieren nach 'C:\myExports\employee.csv' Trennzeichen ',' csv;
mitarbeiter ist der Tabellenname in diesem Beispiel ..
Hoffe das hilft.
Wenn Sie nicht jedem Berechtigungen erteilen möchten, können Sie dem Konto, mit dem der Dienst gestartet wurde, Berechtigungen hinzufügen. Kopieren Sie in der Systemsteuerung - Verwaltung - Dienste den Kontonamen auf der Registerkarte "Anmelden". (Auf meinem System heißt das Konto "Network Service".) Dann teilen Sie den Ordner mit der CSV-Datei mit diesem Benutzer, wie in der Antwort oben gezeigt.
Antworten auf dieses Problem in verschiedenen Threads gehen in etwa folgendermaßen aus: __. 1. "Sagen Sie mir genau, welchen Befehl Sie verwendet haben" 2. Msgstr "Vergewissern Sie sich, dass Sie die richtigen Berechtigungen haben" 3. "Nur verwenden/kopieren"
Ich habe gerade versucht, jedem die cvs-Datei zu erteilen, aus der ich kopieren möchte, und es wird mir immer noch die Berechtigung verweigert. Ich denke, dass diese Funktionalität für mehrere aufeinanderfolgende Versionen über mehrere aufeinanderfolgende Windows-Versionen hinweg fehlerhaft ist.
für mich und ich habe gerade einige Stunden damit verbracht ... Ich habe eine zentrale Datenbank mit einer HP-Box, die mit 14.04 postgresql-9.5 pgAdmin3 postgis-2.2 betrieben wird, die Freigaben erfolgen über eine getaktete Samba-Freigabe. Meine Kunden verwenden eine Mischung aus Windows 10.1, 7, 8.1 und ich habe einen Ubuntu 14.04-Desktop.
Ich arbeite mit großen Tabellen, die Datensätze aktualisieren und Daten normalisieren, und habe die Routinen um SQL-Kopieranweisungen aus CSV-Dateien herum aufgebaut, die vom Kern COPY public.table_1 TO erstellt wurden (der Freigabeordner, den ich in Samba https eingerichtet hatte: //www.youtube.com/watch?v=ndAYZ0DJ-U4 ) '/srv/samba/share/[Dateiname
Ich kann die Datenbank dann aktualisieren, wenn die Tabellen mit COPY table_1 aus '/srv/samba/share/test.csv' USING DELIMITERS ',' WITH NULL AS '' CSV HEADER geändert wurden. von einem meiner Kunden.
Der Schlüssel, soweit ich feststellen konnte, ist, dass die Clients, die die Aktualisierung durchführen, Superbenutzer sein müssen. Außerdem muss alles in Bezug auf Benutzer gebunden sein, da hier 4 Server zusammenarbeiten, die hier zusammenarbeiten: Postgresql, Samba, UNIX und WINS. Alle Meine Benutzer sind auf jedem Server mit dem gleichen Benutzernamen registriert, und das gleiche Passwort ist der Hauptfaktor.
Ich hatte lange versucht, Dinge zu verschieben und verschiedene Namenskonventionen auszuprobieren, aber am Ende war es http://www.postgresql.org/message-id/[email protected]gov.au das hat mich geordnet, es war wie ein großer Schalter, der einrastet. Chown 777 auf Ihre Aktien und das Gruppenmanagement war eine wichtige Lernkurve, aber die Stunden, die ich damit verbracht habe, werden Belohnungen ernten ... Ubuntu liebt das Leben und den Geist von Open Source zu lieben, aber das könnte nur Schlafmangel sein, der hereinzieht ... IT WORKS
Um dieses Problem zu beheben, müssen Sie der CSV-Datei die Berechtigung erteilen, da die in einem COPY-Befehl vorhandene CSV-Datei direkt vom Server, jedoch nicht von der Clientanwendung gelesen wird. Um diese Datei für einen Server zugänglich zu machen, müssen wir die vollständige Lese- und Schreibberechtigung erteilen, damit der Postgresql-Benutzer diese Datei lesen und schreiben kann.
Hinweis: Artikel Schritt für Schritt Anleitung.