Thread: What generates pg_config.h?

What generates pg_config.h?

From
Travis Allison
Date:
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

Re: What generates pg_config.h?

From
Adrian Klaver
Date:
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>
> 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


Re: What generates pg_config.h?

From
Travis Allison
Date:
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:
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>
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

Re: What generates pg_config.h?

From
Tom Lane
Date:
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


Re: What generates pg_config.h?

From
Adrian Klaver
Date:
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


Re: What generates pg_config.h?

From
rob stone
Date:
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


Re: What generates pg_config.h?

From
Travis Allison
Date:
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:
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

Re: What generates pg_config.h?

From
Alvaro Herrera
Date:
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


Re: What generates pg_config.h?

From
Tom Lane
Date:
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


Re: What generates pg_config.h?

From
Travis Allison
Date:
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:
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

Re: What generates pg_config.h?

From
Tom Lane
Date:
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


Re: What generates pg_config.h?

From
Adrian Klaver
Date:
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


Re: What generates pg_config.h?

From
Travis Allison
Date:
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:
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

Re: What generates pg_config.h?

From
Tom Lane
Date:
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


Re: What generates pg_config.h?

From
Travis Allison
Date:
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:
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

Re: What generates pg_config.h?

From
Adrian Klaver
Date:
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


Re: What generates pg_config.h?

From
Christoph Berg
Date:
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


Re: What generates pg_config.h?

From
Travis Allison
Date:
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:
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