Postgres: \kopieren Sie die syntax-Fehler in .sql-Datei

Ich versuche, ein Skript zu schreiben, dass Kopien von Daten aus einer Kreuztabellenabfrage ein .csv-Datei in Postgres 8.4. Ich bin in der Lage, führen Sie den Befehl in der psql-Kommandozeile, aber wenn ich den Befehl in eine Datei und führen Sie es über die -f option, bekomme ich einen syntax-Fehler.

Hier ist ein Beispiel was ich schaue (aus diese tolle Antwort):

CREATE TEMP TABLE t (
  section   text
 ,status    text
 ,ct        integer 
);

INSERT INTO t VALUES
 ('A', 'Active', 1), ('A', 'Inactive', 2)
,('B', 'Active', 4), ('B', 'Inactive', 5)
                   , ('C', 'Inactive', 7);

\copy (
SELECT * FROM crosstab(
       'SELECT section, status, ct
        FROM   t
        ORDER  BY 1,2' 
       ,$$VALUES ('Active'::text), ('Inactive')$$)
AS ct ("Section" text, "Active" int, "Inactive" int)
) TO 'test.csv' HEADER CSV

Ich dann dies und das folgende syntax-Fehler:

$ psql [system specific] -f copy_test.sql
CREATE TABLE
INSERT 0 5
psql:copy_test.sql:12: \copy: parse error at end of line
psql:copy_test.sql:19: ERROR:  syntax error at or near ")"
LINE 7: ) TO 'test.csv' HEADER CSV
        ^

Einer ähnlichen übung zu tun, nur eine einfache Abfrage ohne Kreuztabelle funktioniert ohne Zwischenfälle.

Was die Ursache der syntax Fehler, und wie kann ich kopieren Sie diese Tabelle, um eine csv-Datei mit Skript-Datei?

  • Sie sind in der Lage zu laufen, dass \copy ist von der psql Befehlszeile?
  • Richtig. Gerade copy-paste funktioniert es.
  • Für kichert versuchen Sie, alle Zeilenumbrüche aus der \copy Befehl in Ihre Datei und sehen, was passiert.
  • Ok, also es scheint ein problem mit den Zeilenumbrüchen. Es funktioniert, wenn es gibt keine newline-Zeichen, aber alle Zeilenumbrüche erstellen Sie einen syntax Fehler bei der schließenden Klammer.
InformationsquelleAutor David Kelley | 2015-04-14
Schreibe einen Kommentar