Re: Copy Data between different databases

From: Francisco Olarte <folarte(at)peoplecall(dot)com>
To: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
Cc: Tim Semmelhaack <semmelhaack(at)gmx(dot)de>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Copy Data between different databases
Date: 2015-03-04 14:47:52
Message-ID: CA+bJJbz1DLFPBJH=x1yC2WWXR0_M0QJAyrGR_qOkvbHAW+NUnA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi Adrian:

On Wed, Mar 4, 2015 at 1:03 AM, Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
wrote:

>
> ​As you pointed, my bet is in the -f case COPY FROM STDIN expects the
>> data on the file ( otherwise pg_dumps would not work ), but your
>> sugestion seems to have a problem of double redirection, let me elaborate:
>>
>
> Well according to here, they should be roughly equivalent:
>
> http://www.postgresql.org/docs/9.3/interactive/app-psql.html
>

​.... Yeah, they should​, I' was not discussing you. I was pointing the
SHELL line was incorrect,

> Trying it showed they where and ended with the same result, the data was
> not copied over:(
>

​Of course, I'll be greatly surprissed if they did. ​

>
>
> If I did this:
>
> psql -h host1 -U user1 -d db1 -f /q1.sql | psql -h host2 -U user2 -d db2
> -f -
>
> I saw the stdout from my 'q1.sql' show up at the second command, where it
> threw an error because it was just the data without the COPY .. FROM
> statement. So the second command must eat the stdin before it actually runs
> q2.sql. Figured this would have been an easy fix. In my case for this sort
> of thing I use Python/psycopg2 and its COPY TO/FROM commands and run it
> through a buffer. Though of late I have starting using Pandas also.
>

​Of course you end up with an error, I would have reported a bug otherwise.
And also you are not using q2.sql so the result would have been wrong. I
did send you a form ( what you've nicely quoted back ) :

>> (cat q2.sql; ​ psql -h host1 -U user1 -d db1 -f /q1.sql) | psql -h host2
>> -U user2 -d db2
>>
>
​of putting q2.sql in front ​of the output from q1.sql in the same pipe,
even with some samples of how this pipes works. Maybe you stopped reading
too soon. I cannot try it as I do not have q1.sql or q2.sql, but given what
I know about the reading/writing code of psql ( and that I have made this
kinds of things before ) it should work. It's a classical shell construct,
use a sub-shell ( parentheses ) to combine several commands and pipe its
output to another one. The problem what all the others constructs seem to
be trying to do it with a pipe of single commands, which is much more
difficult. Of course, if the problemis due to inadequate shells ( as, say,
cmd.exe ) it may need to be done in other ways.

Regards.
Francisco Olarte.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message María Griensu 2015-03-04 15:03:08 Weight BLOB objects in postgreSQL? How?
Previous Message Stephen Frost 2015-03-04 14:47:07 Re: Partitioning and constraint exclusion