COPY TO '|gzip > /my/cool/file.gz'

Started by Sahagian, Davidover 14 years ago4 messagesgeneral
Jump to latest
#1Sahagian, David
david.sahagian@emc.com

From May 31, 2006; 12:03pm . . .

"It struck me that we are missing a feature that's fairly common in Unix programs.
Perhaps COPY ought to have the ability to pipe its output to a shell command,
or read input from a shell command. "
Maybe something like:
COPY mytable TO '| gzip >/home/tgl/mytable.dump.gz';

Is such a feature (ie being able to tell postgres to write a compressed file via COPY TO) being worked on ?

-dvs-

#2Vibhor Kumar
vibhor.kumar@enterprisedb.com
In reply to: Sahagian, David (#1)
Re: COPY TO '|gzip > /my/cool/file.gz'

On Jul 20, 2011, at 11:29 PM, <david.sahagian@emc.com> <david.sahagian@emc.com> wrote:

From May 31, 2006; 12:03pm . . .

"It struck me that we are missing a feature that's fairly common in Unix programs.
Perhaps COPY ought to have the ability to pipe its output to a shell command,
or read input from a shell command. "
Maybe something like:
COPY mytable TO '| gzip >/home/tgl/mytable.dump.gz';

Is such a feature (ie being able to tell postgres to write a compressed file via COPY TO) being worked on ?

You can use STDOUT to pipe output to a shell command and STDIN to read input from shell command.
Something like given below:
psql -c "COPY mytable to STDOUT"|gzip >/home/tgl/mytable.dump.gz

cat filename|psql -c "COPY mytable from STDIN;"

OR psql -c "COPY mytable from STDIN;" < filename

Thanks & Regards,
Vibhor Kumar
EnterpriseDB Corporation
The Enterprise PostgreSQL Company
Blog: http://vibhork.blogspot.com

#3Craig Ringer
craig@2ndquadrant.com
In reply to: Sahagian, David (#1)
Re: COPY TO '|gzip > /my/cool/file.gz'

On 21/07/11 01:59, david.sahagian@emc.com wrote:

From May 31, 2006; 12:03pm . . .

"It struck me that we are missing a feature that's fairly common in Unix programs.
Perhaps COPY ought to have the ability to pipe its output to a shell command,
or read input from a shell command. "
Maybe something like:
COPY mytable TO '| gzip >/home/tgl/mytable.dump.gz';

Is such a feature (ie being able to tell postgres to write a compressed file via COPY TO) being worked on ?

Not that I've heard of.

In addition to the hint given about using copy to stdout from a "psql
-c" invocation, there is another option. You can create a named pipe
(fifo) file node and use COPY TO to write to it. eg:

$ mkfifo gzfifo; gzip < gzfifo > out.gz &
$ psql -c "COPY tablename TO '/server/path/to/gzfifo';"

gzip will automatically terminate when the output file is closed. The
fifo will not be removed and can be re-used.

Supporting COPY to a pipe would be interesting, though the security
implications would need plenty of thought.

--
Craig Ringer

#4Willy-Bas Loos
willybas@gmail.com
In reply to: Vibhor Kumar (#2)
Re: COPY TO '|gzip > /my/cool/file.gz'

On Wed, Jul 20, 2011 at 8:53 PM, Vibhor Kumar
<vibhor.kumar@enterprisedb.com> wrote:

You can use STDOUT to pipe output to a shell command and STDIN to read input from shell command.
Something like given below:
psql -c "COPY mytable to STDOUT"|gzip >/home/tgl/mytable.dump.gz

cat filename|psql -c "COPY mytable from STDIN;"

OR psql -c "COPY mytable from STDIN;" < filename

nice one, that works great!
(zcat instead of cat, though)

--
"Patriotism is the conviction that your country is superior to all
others because you were born in it." -- George Bernard Shaw