BUG #14819: postgres_fwd could not load library

Started by Takhir Fakhrutdinovover 8 years ago6 messagesbugs
Jump to latest

The following bug has been logged on the website:

Bug reference: 14819
Logged by: Fakhroutdinov Takhir
Email address: fte@nct.ru
PostgreSQL version: 10beta4
Operating system: Mac OS X
Description:

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

ExecProcNode defined in excutor.h as static inlide function, so it not found
in /usr/local/bin/postgres

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Takhir Fakhrutdinov (#1)
Re: BUG #14819: postgres_fwd could not load library

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

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

In reply to: Tom Lane (#2)
Re: BUG #14819: postgres_fwd could not load library

19 сент. 2017 г., в 18:35, Tom Lane <tgl@sss.pgh.pa.us> написал(а):

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

I am download source code from here https://www.postgresql.org/ftp/source/v10beta4/ <https://www.postgresql.org/ftp/source/v10beta4/&gt;

--
With best regards, Takhir Fakhrutdinov

In reply to: Tom Lane (#2)
Re: BUG #14819: postgres_fwd could not load library

19 сент. 2017 г., в 18:35, Tom Lane <tgl@sss.pgh.pa.us> написал(а):

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
2017-07-30 Andres Freund <https://git.postgresql.org/gitweb/?p=postgresql.git;a=search;s=Andres+Freund;st=author&gt; Move ExecProcNode from dispatch to function pointer... <https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=cc9f08b6b813e30789100b6b34110d8be1090ba0&gt;
including the file src/backend/executor/execProcnode.c <https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/executor/execProcnode.c;h=396920c0a23951e02f0dc11da4f004ed9e280f1b;hb=cc9f08b6b813e30789100b6b34110d8be1090ba0&gt;

-/* ----------------------------------------------------------------
- *     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)
…..

and file src/include/executor/executor.h <https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/executor/executor.h;h=60326f9d0372425fc8865f3e20cedfa685ea75cd;hb=cc9f08b6b813e30789100b6b34110d8be1090ba0&gt;

 /*
- * 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

But postgres_fdw.c <https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=contrib/postgres_fdw/postgres_fdw.c;h=fb65e2eb20cd84e68de5e3fd5a00b9af521498a4;hb=HEAD&gt; still call _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

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Takhir Fakhrutdinov (#4)
Re: BUG #14819: postgres_fwd could not load library

Takhir Fakhrutdinov <fte@nct.ru> writes:

19 сент. 2017 г., в 18:35, Tom Lane <tgl@sss.pgh.pa.us> написал(а):
Apparently you're using an old version of postgres_fdw with a v10
core server.

So postgresql core now has no entry _ExecProcNode

Yup. And the problem is you're trying to run a version of postgres_fdw.so
that still thinks there should be such an entry. If it's not actually
old, then most likely the problem is that the compiler looked at an old
version of executor.h while compiling it.

regards, tom lane

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

In reply to: Tom Lane (#5)
Re: BUG #14819: postgres_fwd could not load library

19 сент. 2017 г., в 22:43, Tom Lane <tgl@sss.pgh.pa.us> написал(а):

Takhir Fakhrutdinov <fte@nct.ru> writes:

19 сент. 2017 г., в 18:35, Tom Lane <tgl@sss.pgh.pa.us> написал(а):
Apparently you're using an old version of postgres_fdw with a v10
core server.

So postgresql core now has no entry _ExecProcNode

Yup. And the problem is you're trying to run a version of postgres_fdw.so
that still thinks there should be such an entry. If it's not actually
old, then most likely the problem is that the compiler looked at an old
version of executor.h while compiling it.

regards, tom lane

Thank you, you are right, I really used the old version of postgres_fdw.so

--
With best regards, Takhir Fakhrutdinov