Sto provando a scrivere uno script che copia i dati da una query a campi incrociati in un file .csv in Postgres 8.4. Sono in grado di eseguire il comando nella riga di comando psql ma quando inserisco il comando in un file ed eseguo l'operazione con l'opzione -f
, viene visualizzato un errore di sintassi.Postgres: copy syntax error in .sql file
Ecco un esempio di quello che sto guardando (da this grande risposta):
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
Ho quindi eseguito questo e ottengo il seguente errore di sintassi:
$ 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 esercizio simile facendo solo una semplice query senza crosstab funziona senza incidenti.
Che cosa causa l'errore di sintassi e come posso copiare questa tabella in un file csv utilizzando il file di script?
È possibile eseguire '\ copy' as-is dalla riga di comando' psql'? –
corretto. Copia-incolla dritta lo fa. –
Per le risate, prova a togliere tutte le nuove righe dal comando '\ copia' nel tuo file e guarda cosa succede. –