Ошибка сегментации 11, труба zcat в postgresql 9.0.5 (Лев) - PullRequest
0 голосов
/ 25 октября 2011

У меня есть скрипт bash как таковой:

GITUSER="mygituser"
DBUSER="mysitedbuser"
DB="mysitedb"
SITE="mysite.com"
REPO="/var/git/myproject.git" # on the server

dropdb -U $DBUSER $DB &&
echo "remote db dump (gzip)" &&
F=`ssh $GITUSER@$SITE $REPO/dumpdb-gzip.sh` &&
echo "copying remote dump to localhost" &&
scp $GITUSER@$SITE:"$F" . &&
echo "deleting remote file" &&
ssh $GITUSER@$SITE rm "$F" &&
echo "loading dump in local db" &&
createdb -U $DBUSER -E UTF8 -O $DBUSER $DB &&
psql -U postgres -c "ALTER SCHEMA public OWNER TO $DBUSER" $DB &&
F=`echo "$F" | sed 's/^\/tmp\///'` &&
zcat "$F" | psql -q -f - -U $DBUSER $DB >/dev/null &&
rm "$F"

Но запуск в Mac OS X (Lion) выдает мне эту ошибку:

$ ./fetch_server_db.sh
remote db dump (gzip)
copying remote dump to localhost
pg_dump_2011-10-25_09-20-50.db.gz                     100% 1017KB 254.2KB/s   00:04    
deleting remote file
loading dump in local db
ALTER SCHEMA
./fetch_server_db.sh: line 24: 25878 Broken pipe: 13         zcat "$F"
     25879 Segmentation fault: 11  | psql -q -f - -U $DBUSER $DB > /dev/null

У меня нет такой ошибки на Snow Leopard, и этот скрипт продолжает отлично работать на моей машине с Linux. Этот скрипт завершается с ошибкой сегментации только после того, как я обновился до Lion.

Есть идеи, в чем может быть проблема? Если немедленный ответ не очевиден, то указание мне в правильном направлении для отладки этого скрипта или для определения источника проблемы в Mac OS X Lion будет хорошо! : -)

UPDATE

Я также выделил эту проблему, чтобы обвинить ее в postgresql 9.0.5. В частности, когда линия:

zcat "$F" | psql -q -f - -U $DBUSER $DB >/dev/null

выполняется (я вручную запускал команды в терминале), я получаю сообщение об ошибке «Ошибка сегментации: 11» из postgresql, например:

zcat "$F" | psql -q -f - -U mysitedbuser mysitedb >/dev/null
psql:-:32: ERROR:  relation "acl_dummy" already exists
psql:-:46: ERROR:  relation "acl_dummy_id_seq" already exists
Segmentation fault: 11

И это версия PSQL, которую я использую на своем Lion:

$ psql --version
psql (PostgreSQL) 9.0.5
contains support for command-line editing

$ which psql
/opt/local/lib/postgresql90/bin/psql

$ psql -U postgres
psql (9.0.5)
Type "help" for help.

postgres=# 

Любые предложения, что еще я могу сделать?

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Проблема возникает для скомпилированных пакетов Xcode 4.2 postgresql (сбивает как postgresql90, так и postgresql91). (см. https://trac.macports.org/ticket/30090)

Решение состоит в том, чтобы написать свой собственный Portfile в ~ / ports / database / postgresql90 / Portfile, добавив куда-нибудь строку 9:

revision:      1

и добавление где-то к строке 40:

if {${configure.compiler} == "clang"} { 
configure.compiler llvm-gcc-4.2 
}

Затем скопируйте весь подкаталог «files» из /opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/databases/postgresql90/files

.

Убедитесь, что в /opt/local/etc/macports/sources.conf добавьте

file:///Users/whateveryourusernameis/ports

перед URL, указывающим на

rsync://rsync.macports.org/release/tarballs/ports.tar [default]

Затем выполните portindex в ~ / ports или sudo port -v selfupdate.

И, наконец, удалите предыдущий скомпилированный пакет clang postgresql90, очистите его:

sudo port -v uninstall postgresql90 postgresql90-server
sudo port clean postgresql90 postgresql90-server

и затем переустановите с помощью:

sudo port -v install postgresql90 postgresql90-server

Во время этого шага переустановки вы должны заметить в stdout, что ваши пакеты postgresql90 теперь компилируются с помощью llvm-gcc-4.2.

Как общее примечание для компиляции пакетов через MacPorts, мы можем выбрать, какой компилятор использовать для определенного пакета (порта), используя рекомендации здесь - https://trac.macports.org/wiki/PortfileRecipes#compiler

0 голосов
/ 13 января 2012

На самом деле postgres90@9.0.6 уже включает эту поправку.

Вы можете выполнить обновление, просто выполнив:

sudo port -v uninstall postgresql90
sudo port -v install postgresql90

То же самое происходит с postgresql91

...