COPY TO '|gzip > /my/cool/file.gz'
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-
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
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
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.gzcat 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