2015-05-09 10 views
5

Ich benutze Postgres 9.3, aber meine pg_config Punkte bei 9.4, verhindert mich von Erweiterungen (pgTap).pg_config zeigt 9,4 statt 9,3

$ sudo aptitude search postgresql | grep ^i 
i postgresql-9.3     - object-relational SQL database, 
version 9. 
i postgresql-client-9.3   - front-end programs for PostgreSQL 9.3 

i A postgresql-client-common  - manager for multiple PostgreSQL client 
ver 
i A postgresql-common    - PostgreSQL database-cluster manager 

i postgresql-contrib-9.3   - additional facilities for PostgreSQL 

Wie Sie oben habe ich installiert sehen 9,3

$ pg_config 
BINDIR = /usr/lib/postgresql/9.4/bin 
DOCDIR = /usr/share/doc/postgresql-doc-9.4 
HTMLDIR = /usr/share/doc/postgresql-doc-9.4 
INCLUDEDIR = /usr/include/postgresql 
PKGINCLUDEDIR = /usr/include/postgresql 
INCLUDEDIR-SERVER = /usr/include/postgresql/9.4/server 
LIBDIR = /usr/lib/x86_64-linux-gnu 
PKGLIBDIR = /usr/lib/postgresql/9.4/lib 
LOCALEDIR = /usr/share/locale 
MANDIR = /usr/share/postgresql/9.4/man 
SHAREDIR = /usr/share/postgresql/9.4 
SYSCONFDIR = /etc/postgresql-common 
PGXS = /usr/lib/postgresql/9.4/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/tcl8.5' '--with-includes=/usr/include/tcl8.5' 
'PYTHON=/usr/bin/python' '--mandir=/usr/share/postgresql/9.4/man' 
'--docdir=/usr/share/doc/postgresql-doc-9.4' 
'--sysconfdir=/etc/postgresql-common' '--datarootdir=/usr/share/' 
'--datadir=/usr/share/postgresql/9.4' '--bindir=/usr/lib/postgresql/9.4/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-debug' 
'--disable-rpath' '--with-uuid=e2fs' '--with-gnu-ld' '--with-pgport=5432' 
'--with-system-tzdata=/usr/share/zoneinfo' 'CFLAGS=-g -O2 -fstack-protector 
--param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security 
-I/usr/include/mit-krb5 -fPIC -pie -DLINUX_OOM_SCORE_ADJ=0 
-fno-omit-frame-pointer' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro 
-Wl,-z,now -Wl,--as-needed -L/usr/lib/mit-krb5 
-L/usr/lib/x86_64-linux-gnu/mit-krb5' '--with-krb5' '--with-gssapi' 
'--with-ldap' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 
CC = gcc 
CPPFLAGS = -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 
-I/usr/include/tcl8.5 
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 --param=ssp-buffer-size=4 -Wformat 
-Wformat-security -Werror=format-security -I/usr/include/mit-krb5 -fPIC -pie 
-DLINUX_OOM_SCORE_ADJ=0 -fno-omit-frame-pointer 
CFLAGS_SL = -fpic 
LDFLAGS = -L../../../src/common -Wl,-Bsymbolic-functions -Wl,-z,relro 
-Wl,-z,now -Wl,--as-needed -L/usr/lib/mit-krb5 
-L/usr/lib/x86_64-linux-gnu/mit-krb5 -L/usr/lib/x86_64-linux-gnu 
-Wl,--as-needed 
LDFLAGS_EX = 
LDFLAGS_SL = 
LIBS = -lpgcommon -lpgport -lxslt -lxml2 -lpam -lssl -lcrypto -lgssapi_krb5 
-lz -ledit -lrt -lcrypt -ldl -lm 
VERSION = PostgreSQL 9.4.1 

Lauf ls gegen keines der /postgresql Standorte von pg_config (z /usr/lib/postgresql) nur 9,3 zurück.

Lauf which pg_config Ergebnisse in: /usr/bin/pg_config

Blick in /usr/bin/pg_config (vi) die folgende ist der Inhalt:

PGBINROOT="/usr/lib/postgresql/" 
LATEST_SERVER_DEV=`ls $PGBINROOT*/bin/pg_config 2>/dev/null|tail -n1` 

if [ -n "$LATEST_SERVER_DEV" ]; then 
    exec "$LATEST_SERVER_DEV" "[email protected]" 
else 
    if [ -x /usr/bin/pg_config.libpq-dev ]; then 
     exec /usr/bin/pg_config.libpq-dev "[email protected]" 
    ... 
    ... 
    ... 

Jetzt in /usr/lib/postgresql/9.3/bin suchen produziert nicht eine pg_config Datei.

mit apt-get purge postgresql-9.3 gefolgt von apt-get install postgresql-9.3 repariert nicht das Problem.

Der nächstgelegene ich auf eine Antwort gefunden haben, ist dies:

https://bugs.launchpad.net/ubuntu/+source/postgresql-common/+bug/789622

ich beide Schritte befürwortete genommen haben (Upgrade libpq5 und libpq-dev) keine Wirkung.

Irgendwelche Einblicke, wie dies hätte passieren können, und wie man es beheben (oder zumindest umgehen kann?) Ich würde mit der Möglichkeit zufrieden sein, pg_config manuell neu zu punkten (obwohl eine tatsächliche Erklärung und Lösung besser wäre). Gibt es nur eine Möglichkeit für mich, eine pg_config-Datei im Verzeichnis /usr/lib/postgresql/9.3 zu instanziieren?

+0

Und die Ausgabe von 'welche pg_config'? – wildplasser

+0

zu Frage hinzugefügt, seine/usr/bin/pg_config –

Antwort

6

Dies habe für mich festgelegt, indem Sie:

sudo apt-get install postgresql-server-dev-9.3 

Ich weiß nicht wirklich, wie ich immer noch, obwohl in diesem Zustand bekam.

1

Ich habe in das gleiche Problem durch Ausführen von:

apt-get install postgresql-server-dev-all

auf einer pg9.4 Instanz, die das Paket für die Versionen 9.1 installiert, 9.2, 9.3, 9.4 und 9.5.

Es stellt sich heraus, dass dieses Skript:

/usr/bin/pg_config 

die neueste Version findet und es läuft:

#!/bin/sh 

# If postgresql-server-dev-* is installed, call pg_config from the latest 
# available one. Otherwise fall back to libpq-dev's version. 
# 
# (C) 2011 Martin Pitt <[email protected]> 
# 
# This program is free software; you can redistribute it and/or modify 
# it under the terms of the GNU General Public License as published by 
# the Free Software Foundation; either version 2 of the License, or 
# (at your option) any later version. 
# 
# This program is distributed in the hope that it will be useful, 
# but WITHOUT ANY WARRANTY; without even the implied warranty of 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
# GNU General Public License for more details. 
set -e 
PGBINROOT="/usr/lib/postgresql/" 
LATEST_SERVER_DEV=\`ls $PGBINROOT*/bin/pg_config 2>/dev/null|tail -n1\` 

if [ -n "$LATEST_SERVER_DEV" ]; then 
    exec "$LATEST_SERVER_DEV" "[email protected]" 
else 
    if [ -x /usr/bin/pg_config.libpq-dev ]; then 
    exec /usr/bin/pg_config.libpq-dev "[email protected]" 
    else 
    echo "You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application." >&2 
    exit 1 
    fi 
fi 

Die Lösung war das Verzeichnis zu entfernen: /usr/lib/postgresql/9.5

2

Ubuntu entwirft seine Postgres-Pakete, so dass die meisten Befehle eine PGCLUSTER envvar mit einem Wert wie 9.5/main annehmen, damit Sie die Version/den Cluster steuern können Der Befehl sollte verwendet werden. Traurig pg_config nicht!Aber /usr/bin/pg_config ist nur ein Bash-Wrapper, so habe ich ein paar Zeilen wie folgt:

set -e 
PGBINROOT="/usr/lib/postgresql/" 
#redhat# PGBINROOT="/usr/pgsql-" 

# MY CHANGES START HERE 
if [ -n "$PGCLUSTER" ]; then 
    exec "$PGBINROOT/$PGCLUSTER/bin/pg_config" "[email protected]" 
fi 
# MY CHANGES END HERE 

LATEST_SERVER_DEV=`ls $PGBINROOT*/bin/pg_config 2>/dev/null|tail -n1` 

if [ -n "$LATEST_SERVER_DEV" ]; then 
    exec "$LATEST_SERVER_DEV" "[email protected]" 
else 
    if [ -x /usr/bin/pg_config.libpq-dev ]; then 
    exec /usr/bin/pg_config.libpq-dev "[email protected]" 
    else 
    echo "You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application." >&2 
    exit 1 
    fi 
fi 

, die nicht den Cluster Teil der üblichen PGCLUSTER Zeichenfolge nicht unterstützt, aber man kann immer noch sagen PGCLUSTER=9.3 make z.B. Das hilft mir, wenn ich Postgres-Erweiterungen für eine Version, die ich installiert habe, dass ist nicht die neueste.

Ich denke, es könnte sicherer sein, einen anderen Namen für meine Variable hier zu verwenden, aber es hat mir bisher keine Probleme verursacht. :-)