79

私はpostgreSQLが初めてで、簡単な質問があります:

DB を作成する簡単なスクリプトを作成しようとしているので、後で次のように呼び出すことができます。

psql -f createDB.sql

次のように、スクリプトで他のスクリプト (テーブルの作成、制約の追加、関数などのための別のスクリプト) を呼び出すようにします。

\i script1.sql
\i script2.sql

createDB.sql が同じ dirにあれば、問題なく動作します。

しかし、script2 を createDB のあるディレクトリの下のディレクトリに移動し、createDB を次のように変更すると、次のようになります。

\i script1.sql
\i somedir\script2.sql

エラーが発生します:

psql:createDB.sql:2: somedir: 権限が拒否されました

Windows用のPostgres Plus 8.3、デフォルトのpostgresユーザーを使用しています。

編集:

愚かな私、UNIXスラッシュが問題を解決しました。

4

4 に答える 4

105

Postgres は Linux/Unix で開始されました。スラッシュを逆にして修正すると思われます。

\i somedir/script2.sql 

何かを完全に修飾する必要がある場合

\i c:/somedir/script2.sql

それでも問題が解決しない場合は、バックスラッシュをエスケープする必要があると思います。

\i somedir\\script2.sql
于 2008-09-24T19:58:52.387 に答える
6

Unix スタイルのスラッシュ (\ の代わりに /) を使用してみましたか?

\ はエスケープ文字またはコマンド文字であることが多く、混乱の原因になることがあります。これで問題が発生したことはありませんが、Windows も持っていないため、テストできません。

さらに、権限は、psql を実行しているユーザー、または postmaster サービスを実行しているユーザーに基づいている場合があります。両方がそのディレクトリ内のそのファイルを読み取ったことを確認してください。

于 2008-09-24T20:03:23.110 に答える
3

これを試してみてください、私はそうするために自分自身を働かせます

\i 'somedir\\script2.sql'
于 2013-03-14T16:55:37.187 に答える