Thanks Orhan, Rahul. I was able to get past that error by including <utils/regproc.h> in src/ports/postgres/dbconnector/UDF_impl.hpp and src/ports/postgres/dbconnector/Backend.hpp
I got a couple other similar errors which I was able to easily patch and finished compiling but then at runtime I got

could not load library "$libdir/": ERROR:  could not load library "/usr/lib/postgresql/10/lib/": /usr/lib/postgresql/10/lib/ undefined symbol: _Z16format_procedurej

so I guess I'll just have to upgrade both Postgres and MADlib at the same time.


On Thu, Aug 16, 2018 at 6:38 PM Rahul Iyer <> wrote:
+ dev@madlib.apache

From the developer perspective on why it's not working: 'format_procedure' is a postgres function which is declared in regproc.h. Looking at the 10_3 branch it's still present in that file, so the declaration should be available to the compiler. 

Maybe search in the INCLUDEDIR-SERVER directory (available by running pg_config) if 'format_procedure' is declared in regproc.h? It's possible it's an include issue that's just showing up with that function. 

On Thu, Aug 16, 2018 at 10:18 AM Orhan Kislal <> wrote:
Hi Mauricio,

Unfortunately, MADlib 1.12 does not support PG 10. Here is the compatibility matrix: 
Earliest MADlib version to support PG 10 officially is 1.14 but I would suggest using our latest release, 1.15.

Please let us know if you have any other questions.



On Thu, Aug 16, 2018 at 9:46 AM Mauricio Scheffer <> wrote:

I need to upgrade an existing Postgres 9.5 + Madlib 1.12 to Postgres 10.
To avoid potential issues I'd like to skip upgrading Madlib, at least for now. It's been working fine for us for quite some time, we don't need any new features.

However I'm having issues compiling Madlib 1.12 on Postgres 10.
Here's what I'm doing:

docker run --rm -it madlib/postgres_10.0 /bin/bash

cd madlib-1.12.0
cp -R src/ports/postgres/9.6/ src/ports/postgres/10.0/
cp src/ports/postgres/cmake/FindPostgreSQL_9_6.cmake src/ports/postgres/cmake/FindPostgreSQL_10_0.cmake

and this is the compile error I'm getting:

[ 42%] Building CXX object src/ports/postgres/10.0/CMakeFiles/madlib_postgresql_10_0.dir/__/__/__/modules/assoc_rules/assoc_rules.cpp.o
In file included from /root/madlib-1.12.0/src/modules/assoc_rules/assoc_rules.cpp:11:0:
/root/madlib-1.12.0/src/ports/postgres/dbconnector/Backend.hpp: In function ‘char* madlib::dbconnector::postgres::{anonymous}::madlib_format_procedure(Oid)’:
/root/madlib-1.12.0/src/ports/postgres/dbconnector/Backend.hpp:35:65: error: ‘format_procedure’ was not declared in this scope
     char*, format_procedure, (Oid procedure_oid), (procedure_oid))
/root/madlib-1.12.0/src/ports/postgres/dbconnector/dbconnector.hpp:166:27: note: in definition of macro ‘MADLIB_WRAP_PG_FUNC’
         _result = _pgfunc _passedlist; \
In file included from /usr/include/postgresql/10/server/postgres.h:48:0,
                 from /root/madlib-1.12.0/src/ports/postgres/dbconnector/dbconnector.hpp:24,
                 from /root/madlib-1.12.0/src/modules/assoc_rules/assoc_rules.cpp:11:
/root/madlib-1.12.0/src/ports/postgres/dbconnector/UDF_impl.hpp: In static member function ‘static Datum madlib::dbconnector::postgres::UDF::call(FunctionCallInfo)’:
/root/madlib-1.12.0/src/ports/postgres/dbconnector/UDF_impl.hpp:206:56: error: there are no arguments to ‘format_procedure’ that depend on a template parameter, so a declaration of ‘format_procedure’ must be available [-fpermissive]
/root/madlib-1.12.0/src/ports/postgres/dbconnector/UDF_impl.hpp:206:56: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
src/ports/postgres/10.0/CMakeFiles/madlib_postgresql_10_0.dir/build.make:62: recipe for target 'src/ports/postgres/10.0/CMakeFiles/madlib_postgresql_10_0.dir/__/__/__/modules/assoc_rules/assoc_rules.cpp.o' failed

I find this odd as I used the same version of g++ to build the same version of MADlib (1.12) on Postgres 9.5
I've not worked in C++ for many years... would it be safe to set -fpermissive? How would I do that with MADlib's build scripts? I tried ./configure CXXFLAGS="-fpermissive" but it doesn't seem to do anything.

Many thanks.