Hello,

Hadn't really thought of using a foreign table up at this point...
thanks for that.

Will the first solution handle formatting issues (e.g. single quotes)
gracefully?

I think I'd tried it in the past and it didn't work.

PD: I have such a script that handle's the intricacies but it'd still emit
to stdout. (hence the curl simplified in the example)


On Sat, Dec 26, 2020 at 2:40 PM Ian Lawrence Barwick <barw...@gmail.com>
wrote:

> 2020年12月26日(土) 20:19 Markur Sens <markurs...@gmail.com>:
> >
> > Hello,
> >
> > I'm trying to build a few data pipelines with Unix tools but can't
> figure out how to insert in a slurp mode (e.g. not COPY line by line)
> content inside a variable.
> >
> > Consider the following script (using a heredoc)
> >
> > json_url="https://....file.json";
> > local_file="/tmp/a.json"
> >
> > curl -s -m 10 -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0)
> Gecko/20100101 Firefox/30.0' \
> >     --max-redirs 0 -o ${local_file} ${json_url}
> >
> > psql "$PG_URI" -qAt <<SQL
> > create table if not exists (data jsonb);
> >
> > insert into my_table(data) values (pg_read_file('${local_file}')::jsonb)
> > on conflict do nothing;
> > SQL
> >
> > The question is, how can I achieve the same result, without having to
> hit the disk due. to the temporary file.
> > I tried running by using pg_read_file('/dev/stdin')::jsonb
>
> It can be done like this:
>
>     $ curl http://localhost/json.txt
>     {"bar": "baz", "balance": 7.77, "active": false}
>
>     $ psql -v jsonval="`curl -s http://localhost/json.txt`
> <http://localhost/json.txt>" -d
> 'host=localhost dbname=postgres user=postgres' <<SQL
>     INSERT INTO json_test values(:'jsonval')
>     SQL
>
>     INSERT 0 1
>     Time: 0.374 ms
>
> though TBH if I were doing that on a regular basis, I'd do it via a script
> which
> could cope with errors retrieving the remote file, etc.
>
> If the data source (URL) is constant, you could try something along these
> lines
> with file_fdw:
>
>     CREATE EXTENSION file_fdw;
>
>     CREATE SERVER json_curl FOREIGN DATA WRAPPER file_fdw;
>     CREATE FOREIGN TABLE json_src (
>       json_data jsonb
>     )
>     SERVER json_curl
>     OPTIONS (
>       PROGRAM 'curl -s http://localhost/json.txt'
>     );
>
>
> Better alternatives may be available.
>
>
> Regards
>
> Ian Barwick
>
>
>
> --
> EnterpriseDB: https://www.enterprisedb.com
>

Reply via email to