Postgres: \copie d'erreur de syntaxe .fichier sql

Je suis en train d'écrire un script qui copie les données d'une requête analyse croisée à une .fichier csv dans Postgresql 8.4. Je suis en mesure d'exécuter la commande dans la ligne de commande psql mais quand j'ai mis la commande dans un fichier et de l'exécuter à l'aide de la -f option, j'obtiens une erreur de syntaxe.

Voici un exemple de ce que je suis à la recherche d' (à partir de cette grande réponse):

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

Je puis exécutez ce et obtient l'erreur de syntaxe:

$ 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
        ^

Un exercice similaire de faire une simple requête sans tableau croisé fonctionne sans incident.

Quelle est la cause de l'erreur de syntaxe et comment puis-je copier ce tableau dans un fichier csv à l'aide du fichier de script?

Vous êtes en mesure d'exécuter que \copy comme-est de la psql ligne de commande?
Correct. Droit de copier-coller le fait.
Pour le fou rire, essayez de prendre tous les retours à la ligne de la \copy commande dans votre fichier et de voir ce qui se passe.
Ok, il semble y avoir un problème avec les retours à la ligne. Il fonctionne si il n'existe pas de caractères de saut de ligne, mais tous les retours à la ligne créer une erreur de syntaxe à la parenthèse fermante.

OriginalL'auteur David Kelley | 2015-04-14