What generates pg_config.h?

Started by Travis Allisonover 8 years ago18 messagesgeneral
Jump to latest
#1Travis Allison
travisallison@gmail.com

Hi,

I have postgres 9.5 and 9.6 installed. pg_config points to 9.6.
I am trying to compile a postgresql plugin (Timescaledb). I am getting an
error:
-----------------------------------------------
/usr/include/postgresql/pg_config.h:733:0: warning: "PACKAGE_VERSION"
redefined
#define PACKAGE_VERSION "10.0"
^
In file included from /usr/include/postgresql/9.6/server/c.h:53:0,
from /usr/include/postgresql/9.6/server/postgres.h:47,
from /mnt/data/timescaledb/src/init.c:1:
/usr/include/postgresql/9.6/server/pg_config.h:740:0: note: this is the
location of the previous definition
#define PACKAGE_VERSION "9.6.5"
-----------------------------------------------------

The command pg_config gives the following:

---------------------------------------
BINDIR = /usr/lib/postgresql/9.6/bin
DOCDIR = /usr/share/doc/postgresql-doc-9.6
HTMLDIR = /usr/share/doc/postgresql-doc-9.6
INCLUDEDIR = /usr/include/postgresql
PKGINCLUDEDIR = /usr/include/postgresql
INCLUDEDIR-SERVER = /usr/include/postgresql/9.6/server
LIBDIR = /usr/lib/x86_64-linux-gnu
PKGLIBDIR = /usr/lib/postgresql/9.6/lib
LOCALEDIR = /usr/share/locale
MANDIR = /usr/share/postgresql/9.6/man
SHAREDIR = /usr/share/postgresql/9.6
SYSCONFDIR = /etc/postgresql-common
PGXS = /usr/lib/postgresql/9.6/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--with-tcl' '--with-perl' '--with-python' '--with-pam'
'--with-openssl' '--with-libxml' '--with-libxslt'
'--with-tclconfig=/usr/lib/x86_64-linux-gnu/tcl8.6'
'--with-includes=/usr/include/tcl8.6' 'PYTHON=/usr/bin/python'
'--mandir=/usr/share/postgresql/9.6/man'
'--docdir=/usr/share/doc/postgresql-doc-9.6'
'--sysconfdir=/etc/postgresql-common' '--datarootdir=/usr/share/'
'--datadir=/usr/share/postgresql/9.6'
'--bindir=/usr/lib/postgresql/9.6/bin'
'--libdir=/usr/lib/x86_64-linux-gnu/' '--libexecdir=/usr/lib/postgresql/'
'--includedir=/usr/include/postgresql/' '--enable-nls'
'--enable-integer-datetimes' '--enable-thread-safety' '--enable-tap-tests'
'--enable-debug' '--disable-rpath' '--with-uuid=e2fs' '--with-gnu-ld'
'--with-pgport=5432' '--with-system-tzdata=/usr/share/zoneinfo'
'--with-systemd' 'CFLAGS=-g -O2 -fstack-protector-strong -Wformat
-Werror=format-security -fPIC -pie -fno-omit-frame-pointer'
'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now' '--with-gssapi'
'--with-ldap' '--with-includes=/usr/include/mit-krb5'
'--with-libs=/usr/lib/mit-krb5'
'--with-libs=/usr/lib/x86_64-linux-gnu/mit-krb5' '--with-selinux'
'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2'
CC = gcc
CPPFLAGS = -DFRONTEND -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE
-I/usr/include/libxml2 -I/usr/include/mit-krb5
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute
-Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard
-g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC
-pie -fno-omit-frame-pointer
CFLAGS_SL = -fPIC
LDFLAGS = -L../../src/common -Wl,-Bsymbolic-functions -Wl,-z,relro
-Wl,-z,now -L/usr/lib/x86_64-linux-gnu/mit-krb5 -Wl,--as-needed
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgcommon -lpgport -lselinux -lxslt -lxml2 -lpam -lssl -lcrypto
-lgssapi_krb5 -lz -ledit -lrt -lcrypt -ldl -lm
VERSION = PostgreSQL 9.6.5
-------------------------------------------------

So my question is: what is generating the
/usr/include/postgresql/pg_config.h file? Why is it different than the
/usr/include/postgresql/9.6/server/pg_config.h file?

Thanks!

Travis

#2Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Travis Allison (#1)
Re: What generates pg_config.h?

On 01/05/2018 09:07 AM, Travis Allison wrote:

Hi,

I have postgres 9.5 and 9.6 installed.  pg_config points to 9.6.
I am trying to compile a postgresql plugin (Timescaledb).  I am getting
an error:
-----------------------------------------------
/usr/include/postgresql/pg_config.h:733:0: warning: "PACKAGE_VERSION"
redefined
 #define PACKAGE_VERSION "10.0"
 ^
In file included from /usr/include/postgresql/9.6/server/c.h:53:0,
                 from /usr/include/postgresql/9.6/server/postgres.h:47,
                 from /mnt/data/timescaledb/src/init.c:1:
/usr/include/postgresql/9.6/server/pg_config.h:740:0: note: this is the
location of the previous definition
 #define PACKAGE_VERSION "9.6.5"
-----------------------------------------------------

The command pg_config gives the following:

---------------------------------------
BINDIR = /usr/lib/postgresql/9.6/bin
DOCDIR = /usr/share/doc/postgresql-doc-9.6
HTMLDIR = /usr/share/doc/postgresql-doc-9.6
INCLUDEDIR = /usr/include/postgresql
PKGINCLUDEDIR = /usr/include/postgresql
INCLUDEDIR-SERVER = /usr/include/postgresql/9.6/server
LIBDIR = /usr/lib/x86_64-linux-gnu
PKGLIBDIR = /usr/lib/postgresql/9.6/lib
LOCALEDIR = /usr/share/locale
MANDIR = /usr/share/postgresql/9.6/man
SHAREDIR = /usr/share/postgresql/9.6
SYSCONFDIR = /etc/postgresql-common
PGXS = /usr/lib/postgresql/9.6/lib/pgxs/src/makefiles/pgxs.mk
<http://pgxs.mk&gt;
CONFIGURE = '--with-tcl' '--with-perl' '--with-python' '--with-pam'
'--with-openssl' '--with-libxml' '--with-libxslt'
'--with-tclconfig=/usr/lib/x86_64-linux-gnu/tcl8.6'
'--with-includes=/usr/include/tcl8.6' 'PYTHON=/usr/bin/python'
'--mandir=/usr/share/postgresql/9.6/man'
'--docdir=/usr/share/doc/postgresql-doc-9.6'
'--sysconfdir=/etc/postgresql-common' '--datarootdir=/usr/share/'
'--datadir=/usr/share/postgresql/9.6'
'--bindir=/usr/lib/postgresql/9.6/bin'
'--libdir=/usr/lib/x86_64-linux-gnu/'
'--libexecdir=/usr/lib/postgresql/'
'--includedir=/usr/include/postgresql/' '--enable-nls'
'--enable-integer-datetimes' '--enable-thread-safety'
'--enable-tap-tests' '--enable-debug' '--disable-rpath'
'--with-uuid=e2fs' '--with-gnu-ld' '--with-pgport=5432'
'--with-system-tzdata=/usr/share/zoneinfo' '--with-systemd' 'CFLAGS=-g
-O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -pie
-fno-omit-frame-pointer' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro
-Wl,-z,now' '--with-gssapi' '--with-ldap'
'--with-includes=/usr/include/mit-krb5' '--with-libs=/usr/lib/mit-krb5'
'--with-libs=/usr/lib/x86_64-linux-gnu/mit-krb5' '--with-selinux'
'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2'
CC = gcc
CPPFLAGS = -DFRONTEND -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE
-I/usr/include/libxml2 -I/usr/include/mit-krb5
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute
-Wformat-security -fno-strict-aliasing -fwrapv
-fexcess-precision=standard -g -g -O2 -fstack-protector-strong -Wformat
-Werror=format-security -fPIC -pie -fno-omit-frame-pointer
CFLAGS_SL = -fPIC
LDFLAGS = -L../../src/common -Wl,-Bsymbolic-functions -Wl,-z,relro
-Wl,-z,now -L/usr/lib/x86_64-linux-gnu/mit-krb5 -Wl,--as-needed
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgcommon -lpgport -lselinux -lxslt -lxml2 -lpam -lssl -lcrypto
-lgssapi_krb5 -lz -ledit -lrt -lcrypt -ldl -lm
VERSION = PostgreSQL 9.6.5
-------------------------------------------------

So my question is: what is generating the
/usr/include/postgresql/pg_config.h file?  Why is it different than the
/usr/include/postgresql/9.6/server/pg_config.h file?

I am guessing you have some part of Postgres 10 installed. During the
build the extension is getting to /usr/include/postgresql/pg_config.h
before it gets to /usr/include/postgresql/9.6/server/pg_config.h. Crank
up your package manager and see what your distro has installed? Along
that line knowing what distro and version you are using as well as how
you installed Postgres 9.5 and 9.6 would be helpful.

Thanks!

Travis

--
Adrian Klaver
adrian.klaver@aklaver.com

#3Travis Allison
travisallison@gmail.com
In reply to: Adrian Klaver (#2)
Re: What generates pg_config.h?

Distro and version: Ubuntu 16.04 LTS.

If memory serves, I installed 9.5 using synaptic and 9.6 using apt-get,
where I followed the instructions from this site:
https://www.postgresql.org/download/linux/ubuntu/

I also have an anaconda installation of postgresql, but that is a version
less than 9.6.

Here are the results for postgresql using dpkg-query -l

ii postgresql 9.5+173 all
object-relational SQL database (supported version)
ii postgresql-9.5 9.5.3-0ubuntu0.16.04 amd64
object-relational SQL database, version 9.5 server
ii postgresql-9.6 9.6.5-1.pgdg16.04+2 amd64
object-relational SQL database, version 9.6 server
ii postgresql-client-9.5 9.5.3-0ubuntu0.16.04 amd64
front-end programs for PostgreSQL 9.5
ii postgresql-client-9.6 9.6.5-1.pgdg16.04+2 amd64
front-end programs for PostgreSQL 9.6
ii postgresql-client-common 173 all
manager for multiple PostgreSQL client versions
ii postgresql-common 173 all
PostgreSQL database-cluster manager
ii postgresql-contrib-9.5 9.5.3-0ubuntu0.16.04 amd64
additional facilities for PostgreSQL
ii postgresql-contrib-9.6 9.6.5-1.pgdg16.04+2 amd64
additional facilities for PostgreSQL
ii postgresql-server-dev-9.5 9.5.3-0ubuntu0.16.04 amd64
development files for PostgreSQL 9.5 server-side
programming
ii postgresql-server-dev-9.6 9.6.5-1.pgdg16.04+2 amd64
development files for PostgreSQL 9.6 server-side
programming

On Fri, Jan 5, 2018 at 10:24 AM, Adrian Klaver <adrian.klaver@aklaver.com>
wrote:

Show quoted text

On 01/05/2018 09:07 AM, Travis Allison wrote:

Hi,

I have postgres 9.5 and 9.6 installed. pg_config points to 9.6.
I am trying to compile a postgresql plugin (Timescaledb). I am getting
an error:
-----------------------------------------------
/usr/include/postgresql/pg_config.h:733:0: warning: "PACKAGE_VERSION"
redefined
#define PACKAGE_VERSION "10.0"
^
In file included from /usr/include/postgresql/9.6/server/c.h:53:0,
from /usr/include/postgresql/9.6/server/postgres.h:47,
from /mnt/data/timescaledb/src/init.c:1:
/usr/include/postgresql/9.6/server/pg_config.h:740:0: note: this is the
location of the previous definition
#define PACKAGE_VERSION "9.6.5"
-----------------------------------------------------

The command pg_config gives the following:

---------------------------------------
BINDIR = /usr/lib/postgresql/9.6/bin
DOCDIR = /usr/share/doc/postgresql-doc-9.6
HTMLDIR = /usr/share/doc/postgresql-doc-9.6
INCLUDEDIR = /usr/include/postgresql
PKGINCLUDEDIR = /usr/include/postgresql
INCLUDEDIR-SERVER = /usr/include/postgresql/9.6/server
LIBDIR = /usr/lib/x86_64-linux-gnu
PKGLIBDIR = /usr/lib/postgresql/9.6/lib
LOCALEDIR = /usr/share/locale
MANDIR = /usr/share/postgresql/9.6/man
SHAREDIR = /usr/share/postgresql/9.6
SYSCONFDIR = /etc/postgresql-common
PGXS = /usr/lib/postgresql/9.6/lib/pgxs/src/makefiles/pgxs.mk <
http://pgxs.mk&gt;
CONFIGURE = '--with-tcl' '--with-perl' '--with-python' '--with-pam'
'--with-openssl' '--with-libxml' '--with-libxslt'
'--with-tclconfig=/usr/lib/x86_64-linux-gnu/tcl8.6'
'--with-includes=/usr/include/tcl8.6' 'PYTHON=/usr/bin/python'
'--mandir=/usr/share/postgresql/9.6/man' '--docdir=/usr/share/doc/postgresql-doc-9.6'
'--sysconfdir=/etc/postgresql-common' '--datarootdir=/usr/share/'
'--datadir=/usr/share/postgresql/9.6' '--bindir=/usr/lib/postgresql/9.6/bin'
'--libdir=/usr/lib/x86_64-linux-gnu/' '--libexecdir=/usr/lib/postgresql/'
'--includedir=/usr/include/postgresql/' '--enable-nls'
'--enable-integer-datetimes' '--enable-thread-safety' '--enable-tap-tests'
'--enable-debug' '--disable-rpath' '--with-uuid=e2fs' '--with-gnu-ld'
'--with-pgport=5432' '--with-system-tzdata=/usr/share/zoneinfo'
'--with-systemd' 'CFLAGS=-g -O2 -fstack-protector-strong -Wformat
-Werror=format-security -fPIC -pie -fno-omit-frame-pointer'
'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now'
'--with-gssapi' '--with-ldap' '--with-includes=/usr/include/mit-krb5'
'--with-libs=/usr/lib/mit-krb5' '--with-libs=/usr/lib/x86_64-linux-gnu/mit-krb5'
'--with-selinux' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2'
CC = gcc
CPPFLAGS = -DFRONTEND -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE
-I/usr/include/libxml2 -I/usr/include/mit-krb5
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute
-Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard
-g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC
-pie -fno-omit-frame-pointer
CFLAGS_SL = -fPIC
LDFLAGS = -L../../src/common -Wl,-Bsymbolic-functions -Wl,-z,relro
-Wl,-z,now -L/usr/lib/x86_64-linux-gnu/mit-krb5 -Wl,--as-needed
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgcommon -lpgport -lselinux -lxslt -lxml2 -lpam -lssl -lcrypto
-lgssapi_krb5 -lz -ledit -lrt -lcrypt -ldl -lm
VERSION = PostgreSQL 9.6.5
-------------------------------------------------

So my question is: what is generating the /usr/include/postgresql/pg_config.h
file? Why is it different than the /usr/include/postgresql/9.6/server/pg_config.h
file?

I am guessing you have some part of Postgres 10 installed. During the
build the extension is getting to /usr/include/postgresql/pg_config.h
before it gets to /usr/include/postgresql/9.6/server/pg_config.h. Crank
up your package manager and see what your distro has installed? Along that
line knowing what distro and version you are using as well as how you
installed Postgres 9.5 and 9.6 would be helpful.

Thanks!

Travis

--
Adrian Klaver
adrian.klaver@aklaver.com

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Travis Allison (#3)
Re: What generates pg_config.h?

Travis Allison <travisallison@gmail.com> writes:

Distro and version: Ubuntu 16.04 LTS.
If memory serves, I installed 9.5 using synaptic and 9.6 using apt-get,
where I followed the instructions from this site:
https://www.postgresql.org/download/linux/ubuntu/

I also have an anaconda installation of postgresql, but that is a version
less than 9.6.

Well, this bit:

/usr/include/postgresql/pg_config.h:733:0: warning: "PACKAGE_VERSION" redefined
#define PACKAGE_VERSION "10.0"

is proof positive that you've got at least some pieces of a v10
installation as well. The location of the file (i.e., not under a
version-named subdirectory, like the others) suggests that that
installation was not aware of the conventions Ubuntu's packagers
like to use to separate different PG versions from each other.
And the lack of any relevant entry in the dpkg output suggests it didn't
come from any of your normal packages, either. I'm wondering about an
ill-advised manual installation from raw PG source code, for instance.

Did you check whether this file is associated with any dpkg-installed
package? (Not being an Ubuntu user, I don't know how to do that,
but I'm sure they have an equivalent of "rpm -qf".)

regards, tom lane

#5Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Travis Allison (#3)
Re: What generates pg_config.h?

On 01/05/2018 11:57 AM, Travis Allison wrote:

Distro and version:  Ubuntu 16.04 LTS.

If memory serves, I installed 9.5 using synaptic and 9.6 using apt-get,
where I followed the instructions from this site:
https://www.postgresql.org/download/linux/ubuntu/

I also have an anaconda installation of postgresql, but that is a
version less than 9.6.

Here are the results for postgresql using dpkg-query -l

Well somehow a Postgres 10 version of pg_config.h got installed.
Is there an instance of Postgres 10 running?

ii  postgresql                             9.5+173                  all
                     object-relational SQL database (supported version)
ii  postgresql-9.5                         9.5.3-0ubuntu0.16.04
amd64                    object-relational SQL database, version 9.5 server
ii  postgresql-9.6                         9.6.5-1.pgdg16.04+2
 amd64                    object-relational SQL database, version 9.6
server
ii  postgresql-client-9.5                  9.5.3-0ubuntu0.16.04
amd64                    front-end programs for PostgreSQL 9.5
ii  postgresql-client-9.6                  9.6.5-1.pgdg16.04+2
 amd64                    front-end programs for PostgreSQL 9.6
ii  postgresql-client-common               173                      all
                     manager for multiple PostgreSQL client versions
ii  postgresql-common                      173                      all
                     PostgreSQL database-cluster manager
ii  postgresql-contrib-9.5                 9.5.3-0ubuntu0.16.04
amd64                    additional facilities for PostgreSQL
ii  postgresql-contrib-9.6                 9.6.5-1.pgdg16.04+2
 amd64                    additional facilities for PostgreSQL
ii  postgresql-server-dev-9.5              9.5.3-0ubuntu0.16.04
amd64                    development files for PostgreSQL 9.5
server-side programming
ii  postgresql-server-dev-9.6              9.6.5-1.pgdg16.04+2
 amd64                    development files for PostgreSQL 9.6
server-side programming

--
Adrian Klaver
adrian.klaver@aklaver.com

#6rob stone
floriparob@gmail.com
In reply to: Adrian Klaver (#5)
Re: What generates pg_config.h?

Hello,

On Fri, 2018-01-05 at 12:19 -0800, Adrian Klaver wrote:

On 01/05/2018 11:57 AM, Travis Allison wrote:

Distro and version: Ubuntu 16.04 LTS.

If memory serves, I installed 9.5 using synaptic and 9.6 using apt-
get,
where I followed the instructions from this site:
https://www.postgresql.org/download/linux/ubuntu/

I also have an anaconda installation of postgresql, but that is a
version less than 9.6.

Here are the results for postgresql using dpkg-query -l

Well somehow a Postgres 10 version of pg_config.h got installed.
Is there an instance of Postgres 10 running?

ii postgresql 9.5+173
all
object-relational SQL database (supported
version)
ii postgresql-9.5 9.5.3-
0ubuntu0.16.04
amd64 object-relational SQL database, version
9.5 server
ii postgresql-9.6 9.6.5-1.pgdg16.04+2
amd64 object-relational SQL database, version
9.6
server
ii postgresql-client-9.5 9.5.3-
0ubuntu0.16.04
amd64 front-end programs for PostgreSQL 9.5
ii postgresql-client-9.6 9.6.5-1.pgdg16.04+2
amd64 front-end programs for PostgreSQL 9.6
ii postgresql-client-common 173
all
manager for multiple PostgreSQL client
versions
ii postgresql-common 173
all
PostgreSQL database-cluster manager
ii postgresql-contrib-9.5 9.5.3-
0ubuntu0.16.04
amd64 additional facilities for PostgreSQL
ii postgresql-contrib-9.6 9.6.5-1.pgdg16.04+2
amd64 additional facilities for PostgreSQL
ii postgresql-server-dev-9.5 9.5.3-
0ubuntu0.16.04
amd64 development files for PostgreSQL 9.5
server-side programming
ii postgresql-server-dev-9.6 9.6.5-1.pgdg16.04+2
amd64 development files for PostgreSQL 9.6
server-side programming

Shouldn't the OP check the libpq-dev libraries as well?

Not an expert. My two cents.
Rob

#7Travis Allison
travisallison@gmail.com
In reply to: Adrian Klaver (#5)
Re: What generates pg_config.h?

No instance of Postgres 10 running. I took Tom's suggestion: I ran dpkg -S
/usr/include/postgresql/pg_config.h
Result: libpq-dev: /usr/include/postgresql/pg_config.h

Here is the result from dpkg-query -l | grep libpq

ii libpq-dev 10.0-1.pgdg16.04+1
amd64 header files for libpq5
(PostgreSQL library)
ii libpq5:amd64 10.0-1.pgdg16.04+1
amd64 PostgreSQL C client library

So thanks to all of your help, I've identified the culprit.

Any suggestions on what to do next?

On Fri, Jan 5, 2018 at 12:19 PM, Adrian Klaver <adrian.klaver@aklaver.com>
wrote:

Show quoted text

On 01/05/2018 11:57 AM, Travis Allison wrote:

Distro and version: Ubuntu 16.04 LTS.

If memory serves, I installed 9.5 using synaptic and 9.6 using apt-get,
where I followed the instructions from this site:
https://www.postgresql.org/download/linux/ubuntu/

I also have an anaconda installation of postgresql, but that is a version
less than 9.6.

Here are the results for postgresql using dpkg-query -l

Well somehow a Postgres 10 version of pg_config.h got installed.
Is there an instance of Postgres 10 running?

ii postgresql 9.5+173 all
object-relational SQL database (supported version)
ii postgresql-9.5 9.5.3-0ubuntu0.16.04 amd64
object-relational SQL database, version 9.5 server
ii postgresql-9.6 9.6.5-1.pgdg16.04+2
amd64 object-relational SQL database, version 9.6 server
ii postgresql-client-9.5 9.5.3-0ubuntu0.16.04 amd64
front-end programs for PostgreSQL 9.5
ii postgresql-client-9.6 9.6.5-1.pgdg16.04+2
amd64 front-end programs for PostgreSQL 9.6
ii postgresql-client-common 173 all
manager for multiple PostgreSQL client versions
ii postgresql-common 173 all
PostgreSQL database-cluster manager
ii postgresql-contrib-9.5 9.5.3-0ubuntu0.16.04 amd64
additional facilities for PostgreSQL
ii postgresql-contrib-9.6 9.6.5-1.pgdg16.04+2
amd64 additional facilities for PostgreSQL
ii postgresql-server-dev-9.5 9.5.3-0ubuntu0.16.04 amd64
development files for PostgreSQL 9.5 server-side
programming
ii postgresql-server-dev-9.6 9.6.5-1.pgdg16.04+2
amd64 development files for PostgreSQL 9.6 server-side
programming

--
Adrian Klaver
adrian.klaver@aklaver.com

#8Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Travis Allison (#7)
Re: What generates pg_config.h?

Travis Allison wrote:

No instance of Postgres 10 running. I took Tom's suggestion: I ran dpkg -S
/usr/include/postgresql/pg_config.h
Result: libpq-dev: /usr/include/postgresql/pg_config.h

Here is the result from dpkg-query -l | grep libpq

ii libpq-dev 10.0-1.pgdg16.04+1
amd64 header files for libpq5
(PostgreSQL library)
ii libpq5:amd64 10.0-1.pgdg16.04+1
amd64 PostgreSQL C client library

So thanks to all of your help, I've identified the culprit.

Any suggestions on what to do next?

I wonder if there is a mistake in the use of INCLUDEDIR vs.
INCLUDEDIR-SERVER for -I. Maybe both are being used, and looks like
only the latter should be. It seems odd that there are two pg_config.h
files getting included ...

but I do wonder why is there a pg_config.h in libpq-dev.

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#9Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#8)
Re: What generates pg_config.h?

Alvaro Herrera <alvherre@alvh.no-ip.org> writes:

Travis Allison wrote:

No instance of Postgres 10 running. I took Tom's suggestion: I ran dpkg -S
/usr/include/postgresql/pg_config.h
Result: libpq-dev: /usr/include/postgresql/pg_config.h

Ah, thanks for clearing that up.

Any suggestions on what to do next?

I wonder if there is a mistake in the use of INCLUDEDIR vs.
INCLUDEDIR-SERVER for -I. Maybe both are being used, and looks like
only the latter should be. It seems odd that there are two pg_config.h
files getting included ...

Yeah ...

but I do wonder why is there a pg_config.h in libpq-dev.

Now I seem to recall some discussion with a packager who felt that
providing just the latest-and-greatest libpq was sufficient for
clients, and only server-side code needed to depend on the server
version. So I'm betting that the intention on the Ubuntu packager's
end is that you use a -I for /usr/include/postgresql when building
client code, while if you want to build a server extension, you
point at the appropriate version subdirectory. Meanwhile, the
extension Travis is trying to build is unfamiliar with that idea
and is throwing in a bunch of -I switches willy-nilly.

In short, yeah, try removing the -I that's pointing at the upper
directory.

regards, tom lane

#10Travis Allison
travisallison@gmail.com
In reply to: Tom Lane (#9)
Re: What generates pg_config.h?

Tom, where's the -l switch exactly? What command is it attached to? (I'm
not sure what to look for.)

Thanks,

Travis

On Fri, Jan 5, 2018 at 2:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Show quoted text

Alvaro Herrera <alvherre@alvh.no-ip.org> writes:

Travis Allison wrote:

No instance of Postgres 10 running. I took Tom's suggestion: I ran dpkg

-S

/usr/include/postgresql/pg_config.h
Result: libpq-dev: /usr/include/postgresql/pg_config.h

Ah, thanks for clearing that up.

Any suggestions on what to do next?

I wonder if there is a mistake in the use of INCLUDEDIR vs.
INCLUDEDIR-SERVER for -I. Maybe both are being used, and looks like
only the latter should be. It seems odd that there are two pg_config.h
files getting included ...

Yeah ...

but I do wonder why is there a pg_config.h in libpq-dev.

Now I seem to recall some discussion with a packager who felt that
providing just the latest-and-greatest libpq was sufficient for
clients, and only server-side code needed to depend on the server
version. So I'm betting that the intention on the Ubuntu packager's
end is that you use a -I for /usr/include/postgresql when building
client code, while if you want to build a server extension, you
point at the appropriate version subdirectory. Meanwhile, the
extension Travis is trying to build is unfamiliar with that idea
and is throwing in a bunch of -I switches willy-nilly.

In short, yeah, try removing the -I that's pointing at the upper
directory.

regards, tom lane

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Travis Allison (#10)
Re: What generates pg_config.h?

Travis Allison <travisallison@gmail.com> writes:

Tom, where's the -l switch exactly? What command is it attached to? (I'm
not sure what to look for.)

Look into the extension's Makefile for something roughly along the lines
of

CPPFLAGS = -I/usr/include/postgresql

Very likely there's some amount of macro-ization involved, so it might
look more like

INCLUDEDIR = /usr/include/postgresql
...
CPPFLAGS = -I$(INCLUDEDIR)

Furthermore, given our current theory, there's going to be more than
one -I switch on that line, and you want to get rid of just one.

regards, tom lane

#12Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Tom Lane (#11)
Re: What generates pg_config.h?

On 01/05/2018 03:29 PM, Tom Lane wrote:

Travis Allison <travisallison@gmail.com> writes:

Tom, where's the -l switch exactly? What command is it attached to? (I'm
not sure what to look for.)

Look into the extension's Makefile for something roughly along the lines
of

Assuming the OP is talking about this:

https://github.com/timescale/timescaledb

I believe there is an intervening step:

# Bootstrap the build system
./bootstrap

If I am following correctly the -I are in:

CMakeLists.txt

# Get PostgreSQL configuration from pg_config
execute_process(
COMMAND ${PG_CONFIG} --includedir
OUTPUT_VARIABLE PG_INCLUDEDIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND ${PG_CONFIG} --includedir-server
OUTPUT_VARIABLE PG_INCLUDEDIR_SERVER
OUTPUT_STRIP_TRAILING_WHITESPACE)

There does seem to be an apt install:

http://docs.timescale.com/v0.8/getting-started/installation/linux/installation-apt

with the following caveats:
"
Note: PostgreSQL 9.6 is required for TimescaleDB on Ubuntu distros.
Releases with PostgreSQL 10 are coming soon
Prerequisites

Ubuntu 16.04 or later

Build & Install

WARNING:If you have another PostgreSQL installation not via apt,
this will likely cause problems. If you wish to maintain your current
version of PostgreSQL outside of apt, we recommend installing from
source. Otherwise please be sure to remove non-apt installations before
using this method.
"

CPPFLAGS = -I/usr/include/postgresql

Very likely there's some amount of macro-ization involved, so it might
look more like

INCLUDEDIR = /usr/include/postgresql
...
CPPFLAGS = -I$(INCLUDEDIR)

Furthermore, given our current theory, there's going to be more than
one -I switch on that line, and you want to get rid of just one.

regards, tom lane

--
Adrian Klaver
adrian.klaver@aklaver.com

#13Travis Allison
travisallison@gmail.com
In reply to: Adrian Klaver (#12)
Re: What generates pg_config.h?

I suppose an easy workaround is to copy my version 9.6 pg_config.h into my
user/include/postgresql directory and replace the one installed by
libpq-dev.

Can you think of any detrimental side-effects from doing that?

Travis

On Fri, Jan 5, 2018 at 3:40 PM, Adrian Klaver <adrian.klaver@aklaver.com>
wrote:

Show quoted text

On 01/05/2018 03:29 PM, Tom Lane wrote:

Travis Allison <travisallison@gmail.com> writes:

Tom, where's the -l switch exactly? What command is it attached to? (I'm
not sure what to look for.)

Look into the extension's Makefile for something roughly along the lines
of

Assuming the OP is talking about this:

https://github.com/timescale/timescaledb

I believe there is an intervening step:

# Bootstrap the build system
./bootstrap

If I am following correctly the -I are in:

CMakeLists.txt

# Get PostgreSQL configuration from pg_config
execute_process(
COMMAND ${PG_CONFIG} --includedir
OUTPUT_VARIABLE PG_INCLUDEDIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND ${PG_CONFIG} --includedir-server
OUTPUT_VARIABLE PG_INCLUDEDIR_SERVER
OUTPUT_STRIP_TRAILING_WHITESPACE)

There does seem to be an apt install:

http://docs.timescale.com/v0.8/getting-started/installation/
linux/installation-apt

with the following caveats:
"
Note: PostgreSQL 9.6 is required for TimescaleDB on Ubuntu distros.
Releases with PostgreSQL 10 are coming soon
Prerequisites

Ubuntu 16.04 or later

Build & Install

WARNING:If you have another PostgreSQL installation not via apt, this
will likely cause problems. If you wish to maintain your current version of
PostgreSQL outside of apt, we recommend installing from source. Otherwise
please be sure to remove non-apt installations before using this method.

"

CPPFLAGS = -I/usr/include/postgresql

Very likely there's some amount of macro-ization involved, so it might
look more like

INCLUDEDIR = /usr/include/postgresql
...
CPPFLAGS = -I$(INCLUDEDIR)

Furthermore, given our current theory, there's going to be more than
one -I switch on that line, and you want to get rid of just one.

regards, tom lane

--
Adrian Klaver
adrian.klaver@aklaver.com

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Travis Allison (#13)
Re: What generates pg_config.h?

Travis Allison <travisallison@gmail.com> writes:

I suppose an easy workaround is to copy my version 9.6 pg_config.h into my
user/include/postgresql directory and replace the one installed by
libpq-dev.

Can you think of any detrimental side-effects from doing that?

I would not recommend that: it's likely to break code that's expecting
the Ubuntu-standard layout. I think your best course is to adapt the
particular package you're having trouble with to work with that layout.
Maybe contact its author for help?

regards, tom lane

#15Travis Allison
travisallison@gmail.com
In reply to: Tom Lane (#14)
Re: What generates pg_config.h?

Tom, I guess I don't understand the point of having a different pg_config.h
in my user/include/postgresql directory than the postgresql server that I
am running. You mentioned building client code that would reference the
pg_config.h in user/include/postgresql. A couple of questions:

What type of client code are you referring to?
What is the point of having a pg_config.h for a server that I am not even
running?

Travis

On Fri, Jan 5, 2018 at 8:05 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Show quoted text

Travis Allison <travisallison@gmail.com> writes:

I suppose an easy workaround is to copy my version 9.6 pg_config.h into

my

user/include/postgresql directory and replace the one installed by
libpq-dev.

Can you think of any detrimental side-effects from doing that?

I would not recommend that: it's likely to break code that's expecting
the Ubuntu-standard layout. I think your best course is to adapt the
particular package you're having trouble with to work with that layout.
Maybe contact its author for help?

regards, tom lane

#16Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Travis Allison (#15)
Re: What generates pg_config.h?

On 01/05/2018 09:36 PM, Travis Allison wrote:

Tom, I guess I don't understand the point of having a different
pg_config.h in my user/include/postgresql directory than the postgresql
server that I am running.  You mentioned building client code that would
reference the pg_config.h in user/include/postgresql.  A couple of
questions:

What type of client code are you referring to?
What is the point of having a pg_config.h for a server that I am not
even running?

Not Tom, but to answer:

As to client code, that would include the Postgres CLI client psql or
the Python adapter psycopg2 among others. This code does not need to be
on the server machine, it can be anywhere you want a client to connect
to a Postgres server.

The point of a more recent pg_config.h is that client code compiled with
it would be backwards compatible whereas compiling against an older
version would result in code that would not work against newer servers.

The problem you are running into is that the build process is using both
the older(9.6.5) and newer(10.0) pg_config.h at the same time.

Travis

On Fri, Jan 5, 2018 at 8:05 PM, Tom Lane <tgl@sss.pgh.pa.us
<mailto:tgl@sss.pgh.pa.us>> wrote:

Travis Allison <travisallison@gmail.com
<mailto:travisallison@gmail.com>> writes:

I suppose an easy workaround is to copy my version 9.6 pg_config.h into my
user/include/postgresql directory and replace the one installed by
libpq-dev.

Can you think of any detrimental side-effects from doing that?

I would not recommend that: it's likely to break code that's expecting
the Ubuntu-standard layout.  I think your best course is to adapt the
particular package you're having trouble with to work with that layout.
Maybe contact its author for help?

                        regards, tom lane

--
Adrian Klaver
adrian.klaver@aklaver.com

#17Christoph Berg
myon@debian.org
In reply to: Adrian Klaver (#16)
Re: What generates pg_config.h?

Re: Adrian Klaver 2018-01-06 <67591f85-a910-2e0b-1fdd-9c774eacd65f@aklaver.com>

The problem you are running into is that the build process is using both the
older(9.6.5) and newer(10.0) pg_config.h at the same time.

Fwiw, all issues I've seen so far of that kind could be resolved by
putting -I$(pg_config --includedir-server) before -I$(pg_config
--includedir) in the Makefile.

I don't know of any PG extension existing in the wild that does not
work with having both /usr/include/postgresql/$version/server/pg_config.h
and /usr/include/postgresql/pg_config.h installed - and we are
packaging a lot of extensions for apt.postgresql.org for non-latest
majors.

Christoph

#18Travis Allison
travisallison@gmail.com
In reply to: Christoph Berg (#17)
Re: What generates pg_config.h?

I wanted to thank all of you for solving my problem. You have all been
unbelievably helpful!

Travis

On Sat, Jan 6, 2018 at 7:42 AM, Christoph Berg <myon@debian.org> wrote:

Show quoted text

Re: Adrian Klaver 2018-01-06 <67591f85-a910-2e0b-1fdd-
9c774eacd65f@aklaver.com>

The problem you are running into is that the build process is using both

the

older(9.6.5) and newer(10.0) pg_config.h at the same time.

Fwiw, all issues I've seen so far of that kind could be resolved by
putting -I$(pg_config --includedir-server) before -I$(pg_config
--includedir) in the Makefile.

I don't know of any PG extension existing in the wild that does not
work with having both /usr/include/postgresql/$version/server/pg_config.h
and /usr/include/postgresql/pg_config.h installed - and we are
packaging a lot of extensions for apt.postgresql.org for non-latest
majors.

Christoph