2017-02-22 17 views
10

Bu, "Save PL/pgSQL output from PostgreSQL to a CSV file" için this answer'dan sonraki bir sorudur.Çok satırlı sorgu için psql copy komutunu kullanın

Psql'nin \copy command'u kullanarak istemci tarafı bir CSV dosyası yazmam gerekiyor. Bir tek astar çalışır:

db=> \copy (select 1 AS foo) to 'bar.csv' csv header 
COPY 1 

Ancak, birkaç satırdan uzun sorguları var.

db=> \copy (
\copy: parse error at end of line 
db=> \copy (\\ 
\copy: parse error at end of line 
db=> \copy (" 
\copy: parse error at end of line 
db=> \copy "(
\copy: parse error at end of line 
db=> \copy \\ 
\copy: parse error at end of line 

birden çok satıra bölünmüş sorgu ile \copy kullanmak mümkün mü: Ben bir çözümleme hatası olmadan bu geçmiş bir satır uzatmak gibi olamaz gibi ben sorguyu göstermek gerekmez? Windows'ta psql kullanıyorum.

+0

Muhtemelen yeni satırlardan kaçmak zorundasınız? – Falmarri

+0

@Falmarri Sorgumda birkaç genel kaçış denemesi yaptım, ancak "psql'in ... ters eğik çizgi kaçıranlar" uygulamaması "doc" dan, işleri zorlaştırıyor. –

+0

Ona bir cevap gönderdim: http://stackoverflow.com/a/44043716/24105, birden fazla satır elde etmek için dolambaçlı bir yol. –

cevap

11

Şu anda sahip olduğum çalışma çözümü, birden fazla hat üzerinde bildirilebilen create a temporary view'a, ardından bir satırda rahatça oturan \copy komutundan seçim yapın.

db=> CREATE TEMP VIEW v1 AS 
db-> SELECT i 
db-> FROM generate_series(1, 2) AS i; 
CREATE VIEW 
db=> \cd /path/to/a/really/deep/directory/structure/on/client 
db=> \copy (SELECT * FROM v1) TO 'out.csv' csv header 
COPY 2 
db=> DROP VIEW v1; 
DROP VIEW 
+0

Temp görünümü varsa görünümü açıkça kaldırmanız mı gerekiyor? – nyxz

+1

@nyxz bu doğru, bu görünümü bırakmanız gerekmez. Sadece v1 ile işlem yapmak için birden fazla sorgunuz varsa gerekli olabilir. –