1

私の現在のスクリプトは次のようになります。

!/bin/sh 
sudo -u postgres createdb mydb
sudo -u postgres psql mydb
CREATE TABLE person (first VARCHAR(32), last VARCHAR(32));
CREATE TABLE thing (size VARCHAR(32), price VARCHAR(32));
exit 0;

現在のところ、スクリプトを実行すると、データベースが作成されてログインします。CREATE TABLEただし、mydb にログインした後、スクリプトはコマンドの実行を続行しません。

私はこのことに関しては新しいので、これについて正しい方法で行っているかどうかわかりません. 基本的には、データベースを作成し、その中にいくつかのテーブルを (PostgreSQL を使用して) 作成するスクリプトが必要です。

4

3 に答える 3

3

1 つの方法は、here-doc(これはシェルの機能であり、実行しているシェルによって異なります)を使用することです。

psql mydb <<EOF
    CREATE TABLE person (first VARCHAR(32), last VARCHAR(32));
    CREATE TABLE thing (size VARCHAR(32), price VARCHAR(32));
EOF

もう 1 つは、コマンドを十分に保護された (パーミッション付きの) 一時ファイルに書き込んでからpostgres-f FILENAMEオプションを使用してそれをスクリプトとして渡すことです。

于 2012-10-16T05:29:18.933 に答える
1

hba_conf ファイルを「local all postgres trust」に編集した後 (信頼を使用したため、スクリプトにパスワードを入力する必要はありません)、TraviJuu の提案を使用したところ、スクリプトが問題なく動作するようになりました。最終結果は次のようになります。

!/ビン/sh

sudo -u postgres createdb mydb

psql -w -d mydb -U postgres -c "CREATE TABLE person (first VARCHAR(32), last VARCHAR(32));"

psql -w -d mydb -U postgres -c "CREATE TABLE thing (size VARCHAR(32), price VARCHAR(32));"

出口 0;

于 2012-10-17T00:56:11.893 に答える
1
#!/bin/bash

psql -d mydb -U postgres -c "CREATE TABLE person (first VARCHAR(32), last VARCHAR(32));"
psql -d mydb -U postgres -c "CREATE TABLE thing (size VARCHAR(32), price VARCHAR(32));"

-c オプションを使用すると、すべてのクエリを実行できます。

于 2012-10-16T12:05:25.267 に答える