Re: WIP patch: add (PRE|POST)PROCESSOR options to COPY

Поиск
Список
Период
Сортировка
От Etsuro Fujita
Тема Re: WIP patch: add (PRE|POST)PROCESSOR options to COPY
Дата
Msg-id 001d01cdc25b$7eee6ea0$7ccb4be0$@lab.ntt.co.jp
обсуждение исходный текст
Ответ на Re: WIP patch: add (PRE|POST)PROCESSOR options to COPY  ("Etsuro Fujita" <fujita.etsuro@lab.ntt.co.jp>)
Ответы Re: WIP patch: add (PRE|POST)PROCESSOR options to COPY  (Fujii Masao <masao.fujii@gmail.com>)
Список pgsql-hackers
I wrote:
> > From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> 
> > I wrote:
> > > "Etsuro Fujita" <fujita.etsuro@lab.ntt.co.jp> writes:
> > >> I have a question.  I think it would be also better to extend the syntax
> > >> for the SQL COPY command in the same way, ie,
> > >> COPY foo from '/home/pgsql/decompress.sh /home/pgsql/foo.csv.gz |' with
> > >> format 'csv'
> >
> > > Yeah, sure --- that case is already superuser-only, so why not give it
> > > the option of being a popen instead of just fopen.
> >
> > BTW, one thought that comes to mind is that such an operation is
> > extremely likely to fail under environments such as SELinux.  That's
> > not necessarily a reason not to do it, but we should be wary of
> > promising that it will work everywhere.  Probably a documentation note
> > about this would be enough.
> 
> OK  I'll revise the patch.

I've revised the patch.  In this version a user can specify hooks for pre- and
post-processor executables for COPY and \copy in the follwoing way:
   $ echo '/bin/gunzip -c $1' > decompress.sh   $ chmod +x decompress.sh

In the case of the COPY command,
   postgres=# COPY foo FROM '/home/pgsql/decompress.sh /home/pgsql/foo.csv.gz'
WITH (format 'csv');

Also, in the case of the \copy instruction,
   postgres=# \copy foo from '/home/pgsql/decompress.sh /home/pgsql/foo.csv.gz'
with (format 'csv')

As shown in the example above, I've assumed that the syntax for this option for
e.g., the COPY command is:
   COPY table_name FROM 'progname filename' WITH ...   COPY table_name TO 'progname filename' WITH ...

Here, progname for COPY IN is the user-supplied program that takes filename as
its argument and that writes on standard output.  Also, prgoname for COPY OUT is
the user-supplied program that reads standard input and writes to filename taken
as its argument.  This makes simple the identification and verification of
progname and filename.

Todo:   * Documentation including documentation note about the limitation for
environments such as SELinux mentioned by Tom.   * More test

Any comments and suggestions are welcomed.

Thanks,

Best regards,
Etsuro Fujita

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Palle Girgensohn
Дата:
Сообщение: Why does delete from table where not exists (select 1 from ... LIMIT 1) perform badly?
Следующее
От: Amit kapila
Дата:
Сообщение: Re: Performance Improvement by reducing WAL for Update Operation