Re: Archiving Data to Another DB? - Mailing list pgsql-general

From Adrian Klaver
Subject Re: Archiving Data to Another DB?
Date
Msg-id ae18f69c-8ae3-79e3-517a-719bd7700643@aklaver.com
Whole thread Raw
In response to Re: Archiving Data to Another DB?  (Don Seiler <don@seiler.us>)
Responses Re: Archiving Data to Another DB?
List pgsql-general
On 04/11/2018 11:13 AM, Don Seiler wrote:
> On Wed, Apr 11, 2018 at 12:58 PM, Adrian Klaver 
> <adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>> wrote:
> 
>     "F.33.3. Transaction Management
> 
>     During a query that references any remote tables on a foreign
>     server, postgres_fdw opens a transaction on the remote server if one
>     is not already open corresponding to the current local transaction.
>     The remote transaction is committed or aborted when the local
>     transaction commits or aborts. Savepoints are similarly managed by
>     creating corresponding remote savepoints.
> 
>     ..."
> 
> 
> Interesting, I'll work on a test case later!
> 
>     I may be missing something, but why not reverse your original set up?
>     Assuming transactional behavior works as expected something like:
> 
>     1) Setup postgres_fdw in main database.
> 
>     2) Create FOREIGN TABLE pointing to table in archive database.
> 
>     3) INSERT INTO/SELECT from main table to archive table.
> 
>     4) DELETE FROM main table.
> 
> 
> I had considered this as well, as this would allow me to rollback the 
> delete (assuming my intel on postgres_fdw transactions was correct, 
> which it may not be after all). I wondered if a remote insert woultd be 
> broken up into individual inserts like the remote delete was, as that 
> would be equally unappealing for the same reasons. But obviously worth 
> confirming.

A test case here confirms it sends individual INSERTS:

test_(postgres)# insert into fdw_test_table select * from fdw_test;
INSERT 0 3

Where fdw_test_table is the remote table and fdw_test is the local one.

postgres-2018-04-11 11:29:23.812 PDT-0LOG:  statement: insert into 
fdw_test_table select * from fdw_test;
postgres-2018-04-11 11:29:23.812 PDT-0LOG:  execute pgsql_fdw_prep_2: 
INSERT INTO public.fdw_test_rcv(id, fld_1, fld_2) VALUES ($1, $2, $3)
postgres-2018-04-11 11:29:23.812 PDT-0DETAIL:  parameters: $1 = '1', $2 
= 'one', $3 = 't'
postgres-2018-04-11 11:29:23.813 PDT-10140LOG:  execute 
pgsql_fdw_prep_2: INSERT INTO public.fdw_test_rcv(id, fld_1, fld_2) 
VALUES ($1, $2, $3)
postgres-2018-04-11 11:29:23.813 PDT-10140DETAIL:  parameters: $1 = '2', 
$2 = 'two', $3 = 'f'
postgres-2018-04-11 11:29:23.813 PDT-10140LOG:  execute 
pgsql_fdw_prep_2: INSERT INTO public.fdw_test_rcv(id, fld_1, fld_2) 
VALUES ($1, $2, $3)
postgres-2018-04-11 11:29:23.813 PDT-10140DETAIL:  parameters: $1 = '3', 
$2 = 'three', $3 = 'f'

So much for that idea(:

> 
> Don.
> 
> -- 
> Don Seiler
> www.seiler.us <http://www.seiler.us>


-- 
Adrian Klaver
adrian.klaver@aklaver.com


pgsql-general by date:

Previous
From: Steven Hirsch
Date:
Subject: Re: Fwd: Carto ODBC_FDW issue "ERROR: Connecting to driver" from PGto DB2
Next
From: Don Seiler
Date:
Subject: Re: Archiving Data to Another DB?