0

私はそのような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でこのようなエラーは発生しません。このスクリプトは、私のarchlinuxマシンでも完全に正常に機能し続けます。このスクリプトは、Lionにアップグレードした後でのみ、セグメンテーション違反で失敗します。

何が問題になるのか考えてみてください。すぐに答えがわからない場合は、このスクリプトをデバッグするか、Mac OSXLionで問題の原因を特定するための正しい方向に私を向ければ問題ありません。:-)

アップデート

私はこの問題をさらに分離して、postgresql9.0.5のせいにする可能性があります。具体的には、次の場合:

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

実行中(ターミナルでコマンドを1つずつ手動で実行しました)、postgresqlから次のような「Segmentationfault:11」エラーが発生します。

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バージョンです。

$ 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=# 

他に何ができるか提案はありますか?

4

2 に答える 2

3

この問題は、Xcode 4.2でコンパイルされたpostgresqlパッケージで発生します(postgresql90とpostgresql91の両方をねじ込みます)。(https://trac.macports.org/ticket/30090を参照)

解決策は、9行目にどこかに追加して、〜/ Ports / databases / postgresql90/Portfileに独自のポートファイルを書き込むことです。

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]

次に、〜/ portsでportindexを実行するか、sudo port-vselfupdateを実行します。

そして最後に、以前のclangでコンパイルされたpostgresql90パッケージをアンインストールし、それをクリーンアップします。

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

次に、次のコマンドで再インストールします。

sudo port -v install postgresql90 postgresql90-server

この再インストール手順の間に、postgresql90パッケージがllvm-gcc-4.2によってコンパイルされていることにstdoutで気付くはずです。

MacPortsを介したパッケージのコンパイルに関する一般的な注意事項として、ここの推奨事項を使用して、特定のパッケージ(ポート)に使用するコンパイラーを選択できます-https ://trac.macports.org/wiki/PortfileRecipes#compiler

于 2011-10-25T05:43:58.130 に答える
0

実際、postgres90@9.0.6にはすでにこの修正が含まれています。

以下を実行するだけでアップグレードできます。

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

postgresql91でも同じことが起こります

于 2012-01-13T14:19:08.257 に答える