mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Offer triggers on foreign tables.
This covers all the SQL-standard trigger types supported for regular tables; it does not cover constraint triggers. The approach for acquiring the old row mirrors that for view INSTEAD OF triggers. For AFTER ROW triggers, we spool the foreign tuples to a tuplestore. This changes the FDW API contract; when deciding which columns to populate in the slot returned from data modification callbacks, writable FDWs will need to check for AFTER ROW triggers in addition to checking for a RETURNING clause. In support of the feature addition, refactor the TriggerFlags bits and the assembly of old tuples in ModifyTable. Ronan Dunklau, reviewed by KaiGai Kohei; some additional hacking by me.
This commit is contained in:
@ -108,7 +108,7 @@ enum FdwScanPrivateIndex
|
||||
* 1) INSERT/UPDATE/DELETE statement text to be sent to the remote server
|
||||
* 2) Integer list of target attribute numbers for INSERT/UPDATE
|
||||
* (NIL for a DELETE)
|
||||
* 3) Boolean flag showing if there's a RETURNING clause
|
||||
* 3) Boolean flag showing if the remote query has a RETURNING clause
|
||||
* 4) Integer list of attribute numbers retrieved by RETURNING, if any
|
||||
*/
|
||||
enum FdwModifyPrivateIndex
|
||||
@ -1246,7 +1246,7 @@ postgresPlanForeignModify(PlannerInfo *root,
|
||||
*/
|
||||
return list_make4(makeString(sql.data),
|
||||
targetAttrs,
|
||||
makeInteger((returningList != NIL)),
|
||||
makeInteger((retrieved_attrs != NIL)),
|
||||
retrieved_attrs);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user