Re: Two proposed modifications to the PostgreSQL FDW

Поиск
Список
Период
Сортировка
От Chris Travers
Тема Re: Two proposed modifications to the PostgreSQL FDW
Дата
Msg-id CAN-RpxBYOaQS_5jd3V8xM3Qg8bDZXXkKXKz5E7AssJShhw6S2Q@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Two proposed modifications to the PostgreSQL FDW  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers


On Mon, Aug 20, 2018 at 4:44 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Chris Travers <chris.travers@adjust.com> writes:
> I am looking at trying to make two modifications to the PostgreSQL FDW and
> would like feedback on this before I do.

> 1.  INSERTMETHOD=[insert|copy] option on foreign table.

> One significant limitation of the PostgreSQL FDW is that it does a prepared
> statement insert on each row written which imposes a per-row latency.  This
> hits environments where there is significant latency or few latency
> guarantees particularly hard, for example, writing to a foreign table that
> might be physically located on another continent.  The idea is that
> INSERTMETHOD would default to insert and therefore have no changes but
> where needed people could specify COPY which would stream the data out.
> Updates would still be unaffected.

It seems unlikely to me that an FDW option would be at all convenient
for this.  What about selecting it dynamically based on the planner's
estimate of the number of rows to be inserted?

A different thing we could think about is enabling COPY TO/FROM a
foreign table.

Actually as I start to understand some aspects Andres's concern above, there are issues beyond numbers of rows.  But yes, selecting dynamically would be preferable.

Two major things I think we cannot support on this are RETURNING clauses and ON CONFLICT clauses.  So anywhere we need to worry about those a copy node could not be used.  So it is more complex than merely row estimates.

> 2.  TWOPHASECOMMIT=[off|on] option

> The second major issue that I see with PostgreSQL's foreign database
> wrappers is the fact that there is no two phase commit which means that a
> single transaction writing to a group of tables has no expectation that all
> backends will commit or rollback together.  With this patch an option would
> be applied to foreign tables such that they could be set to use two phase
> commit  When this is done, the first write to each backend would register a
> connection with a global transaction handler and a pre-commit and commit
> hooks would be set up to properly process these.

ENOINFRASTRUCTURE ... and the FDW pieces of that hardly seem like the
place to start.

I disagree about the lack of infrastructure.  We have every piece of infrastructure we need for a minimum viable offering.
1.  Two Phase Commit in PostgreSQL
2.  Custom Background Workers
3.  Pre/Post Commit/Rollback hooks for callbacks.

Those are sufficient to handle the vast majority of error cases.

The one thing we *might* want that we don't have is a startup process to scan a directory of background worker status files and fire off appropriate background workers on database start.  That hardly seems difficult though.
 

                        regards, tom lane


--
Best Regards,
Chris Travers
Head of Database

Tel: +49 162 9037 210 | Skype: einhverfr | www.adjust.com 
Saarbrücker Straße 37a, 10405 Berlin

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

Предыдущее
От: Chris Travers
Дата:
Сообщение: Re: Two proposed modifications to the PostgreSQL FDW
Следующее
От: Andres Freund
Дата:
Сообщение: Re: Pluggable Storage - Andres's take