fte@nct.ru writes:
ERROR: could not load library "/usr/local/pgsql/lib/postgres_fdw.so":
dlopen(/usr/local/pgsql/lib/postgres_fdw.so, 10): Symbol not found:
_ExecProcNode
Referenced from: /usr/local/pgsql/lib/postgres_fdw.so
Expected in: /usr/local/pgsql/bin/postgres
in /usr/local/pgsql/lib/postgres_fdw.so
Apparently you're using an old version of postgres_fdw with a v10
core server.
regards, tom lane
Dear, Tom
Changes was made in commit
-/* ----------------------------------------------------------------
- * ExecProcNode
- *
- * Execute the given node to return a(nother) tuple.
- * ----------------------------------------------------------------
+/*
+ * ExecProcNode wrapper that performs some one-time checks, before calling
+ * the relevant node method (possibly via an instrumentation wrapper).
*/
-TupleTableSlot *
-ExecProcNode(PlanState *node)
+static TupleTableSlot *
+ExecProcNodeFirst(PlanState *node)
…..
/*
- * prototypes from functions in execProcnode.c
+ * functions in execProcnode.c
*/
extern PlanState *ExecInitNode(Plan *node, EState *estate, int eflags);
-extern TupleTableSlot *ExecProcNode(PlanState *node);
extern Node *MultiExecProcNode(PlanState *node);
extern void ExecEndNode(PlanState *node);
extern bool ExecShutdownNode(PlanState *node);
+
+/* ----------------------------------------------------------------
+ * ExecProcNode
+ *
+ * Execute the given node to return a(nother) tuple.
+ * ----------------------------------------------------------------
+ */
+#ifndef FRONTEND
+static inline TupleTableSlot *
+ExecProcNode(PlanState *node)
+{
+ if (node->chgParam != NULL) /* something changed? */
+ ExecReScan(node); /* let ReScan handle this */
+
+ return node->ExecProcNode(node);
+}
+#endif
+
So postgresql core now has no entry _
ExecProcNode
/** postgresRecheckForeignScan* Execute a local join execution plan for a foreign join*/
static bool
postgresRecheckForeignScan(ForeignScanState *node, TupleTableSlot *slot)
{Index scanrelid = ((Scan *) node->ss.ps.plan)->scanrelid;PlanState *outerPlan = outerPlanState(node);TupleTableSlot *result;
/* For base foreign relations, it suffices to set fdw_recheck_quals */if (scanrelid > 0) return true;
Assert(outerPlan != NULL);
/* Execute a local join execution plan */result = ExecProcNode(outerPlan);if (TupIsNull(result)) return false;
/* Store result in the given slot */ExecCopySlot(slot, result);
return true;
}
--
With best regards, Takhir Fakhrutdinov