Как указать Postgresql версию клиента, чтобы предотвратить несоответствие версии сервера? - PullRequest
1 голос
/ 20 апреля 2020

Я использую homebrew- postgresql формула для управления несколькими Postgresql версиями. Когда я попытался запустить rails db:migrate с :sql в качестве schema_format, он выдал команду

pg_dump -s -x -O -f /Users/ogirginc/project/blog/db/structure.sql blog_development 

и не смог.

Проблема заключается в несовпадении версий между сервером и сервером. Клиент pg_dump:

pg_dump: server version: 12.2 (Homebrew petere/postgresql); pg_dump version: 10.11 (Homebrew petere/postgresql)
pg_dump: aborting because of server version mismatch
rails aborted!

Когда я прочитал справочные страницы pg_wrapper, как , предложенный автором формулы, я понял: явное определение переменной среды PGCLUSTER, такой как

PGCLUSTER="12/main" rails db:migrate

, должно было предотвратить ошибку несоответствия.

Когда я делаю шаг назад и запускаю psql, он печатает

psql (10.11 (Homebrew petere/postgresql), server 12.2 (Homebrew petere/postgresql))

предупреждение, но работает. Я надеялся, что PGCLUSTER="12/main" psql предотвратит любые предупреждения, но это не так. Кроме того, пробовал brew link -f postgresql@12, но не повезло.

Как я могу решить эту ошибку несоответствия между Postgresql сервером и его 'клиентами?


Дополнительная информация:

$ postgres --version
postgres (PostgreSQL) 10.11 (Homebrew petere/postgresql)

$ brew list | grep postgresql
postgresql-common
postgresql@10
postgresql@11
postgresql@12
postgresql@9.6

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory                        Log file
11  main    5432 online ogirginc /usr/local/var/lib/postgresql/11/main /usr/local/var/log/postgresql/postgresql-11-main.log
12  main    5432 online ogirginc /usr/local/var/lib/postgresql/12/main /usr/local/var/log/postgresql/postgresql-12-main.log

$ pg_config
BINDIR = /usr/local/Cellar/postgresql@10/10.11/bin
DOCDIR = /usr/local/Cellar/postgresql@10/10.11/share/doc
HTMLDIR = /usr/local/Cellar/postgresql@10/10.11/share/doc
INCLUDEDIR = /usr/local/Cellar/postgresql@10/10.11/include
PKGINCLUDEDIR = /usr/local/Cellar/postgresql@10/10.11/include
INCLUDEDIR-SERVER = /usr/local/Cellar/postgresql@10/10.11/include/server
LIBDIR = /usr/local/Cellar/postgresql@10/10.11/lib
PKGLIBDIR = /usr/local/Cellar/postgresql@10/10.11/lib
LOCALEDIR = /usr/local/Cellar/postgresql@10/10.11/share/locale
MANDIR = /usr/local/Cellar/postgresql@10/10.11/share/man
SHAREDIR = /usr/local/Cellar/postgresql@10/10.11/share
SYSCONFDIR = /usr/local/Cellar/postgresql@10/10.11/etc
PGXS = /usr/local/Cellar/postgresql@10/10.11/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/usr/local/Cellar/postgresql@10/10.11' '--enable-dtrace' '--enable-nls' '--with-bonjour' '--with-gssapi' '--with-icu' '--with-ldap' '--with-libxml' '--with-libxslt' '--with-openssl' '--with-uuid=e2fs' '--with-pam' '--with-perl' '--with-python' '--with-tcl' 'XML2_CONFIG=:' '--with-includes=/usr/local/opt/gettext/include:/usr/local/opt/icu4c/include:/usr/local/opt/openldap/include:/usr/local/opt/openssl@1.1/include:/usr/local/opt/readline/include:/usr/local/opt/tcl-tk/include' '--with-libraries=/usr/local/opt/gettext/lib:/usr/local/opt/icu4c/lib:/usr/local/opt/openldap/lib:/usr/local/opt/openssl@1.1/lib:/usr/local/opt/readline/lib:/usr/local/opt/tcl-tk/lib' '--with-extra-version= (Homebrew petere/postgresql)' 'CC=clang' 'PKG_CONFIG_PATH=/usr/local/opt/e2fsprogs/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/openssl@1.1/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig:/usr/local/opt/tcl-tk/lib/pkgconfig' 'PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig:/usr/local/Homebrew/Library/Homebrew/os/mac/pkgconfig/10.15'
CC = clang
CPPFLAGS = -I/usr/local/Cellar/icu4c/64.2/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -I/usr/local/opt/gettext/include -I/usr/local/opt/icu4c/include -I/usr/local/opt/openldap/include -I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/readline/include -I/usr/local/opt/tcl-tk/include
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2
CFLAGS_SL =
LDFLAGS = -L/usr/local/opt/gettext/lib -L/usr/local/opt/icu4c/lib -L/usr/local/opt/openldap/lib -L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/tcl-tk/lib -Wl,-dead_strip_dylibs
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgcommon -lpgport -lintl -lxslt -lxml2 -lpam -lssl -lcrypto -lgssapi_krb5 -lz -lreadline -lm
VERSION = PostgreSQL 10.11 (Homebrew petere/postgresql)

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.4
BuildVersion:   19E287

$ echo $0
-zsh

1 Ответ

0 голосов
/ 29 апреля 2020

Должно было быть более осторожным, потому что я получил ошибку несоответствия для 10.11. Тем не менее, я не использовал эту версию. pg_lsclusters возвращает только 11 и 12.

Оказывается, пару лет go, у меня экспортируется postgresql@10 в мои PATH. pg_wrapper продолжало использовать 10.11, потому что я установил postgresql@10, хотя кластер не был создан.

Я удалил postgresql@10 и обновил свой .zshrc. Теперь все отлично работает.

...