mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
In commit 8bf6ec3ba I assumed that no code path could reach ExecGetExtraUpdatedCols without having gone through ExecInitStoredGenerated. That turns out not to be the case in logical replication: if there's an ON UPDATE trigger on the target table, trigger.c will call this code before anybody has set up its generated columns. Having seen that, I don't have a lot of faith in there not being other such paths. ExecGetExtraUpdatedCols can call ExecInitStoredGenerated for itself, as long as we are willing to assume that it is only called in CMD_UPDATE operations, which on the whole seems like a safer leap of faith. Per report from Vitaly Davydov. Discussion: https://postgr.es/m/d259d69652b8c2ff50e14cda3c236c7f@postgrespro.ru
34 lines
1.1 KiB
C
34 lines
1.1 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* nodeModifyTable.h
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/executor/nodeModifyTable.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef NODEMODIFYTABLE_H
|
|
#define NODEMODIFYTABLE_H
|
|
|
|
#include "nodes/execnodes.h"
|
|
|
|
extern void ExecInitStoredGenerated(ResultRelInfo *resultRelInfo,
|
|
EState *estate,
|
|
CmdType cmdtype);
|
|
|
|
extern void ExecComputeStoredGenerated(ResultRelInfo *resultRelInfo,
|
|
EState *estate, TupleTableSlot *slot,
|
|
CmdType cmdtype);
|
|
|
|
extern ModifyTableState *ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags);
|
|
extern void ExecEndModifyTable(ModifyTableState *node);
|
|
extern void ExecReScanModifyTable(ModifyTableState *node);
|
|
|
|
extern void ExecInitMergeTupleSlots(ModifyTableState *mtstate,
|
|
ResultRelInfo *resultRelInfo);
|
|
|
|
#endif /* NODEMODIFYTABLE_H */
|