2012-02-08 5 views
0

私はデータベースの外でクエリを使用しようとしました。つまり、データベースにログインすることなく、 私は結果を得たいです。オプション(-c)が見つかりました。このオプションを使用して、データベースの外部からクエリを実行することができます。データベース外でスラッシュコマンドを使用するには?

test:~$ psql -U sat -c "select * from test.details"; 

出力を与えます。私はそのクエリをcrontabエントリに使用したいと思います。だから私は、ファイルに出力を格納しようとしている:

ERROR: syntax error at or near "\" 
LINE 1: select * from test.details \g sat 

それをする方法:

test:~$ psql -U sat -c "select * from test.details \g sat"; 

は、エラーが発生しましたか?

答えて

3

これはスラッシュではなく、バックスラッシュです。 バックスラッシュはPostgreSQL文字列リテラルのエスケープ文字です。したがって、実際のデータに単一のバックスラッシュを付けるには、それを倍にする必要があります。 あなたがあなたのクエリがなりますので、-oコマンドラインオプションを使用する必要があり、コマンドラインからファイルにクエリの結果を保存する場合:

psql -o filename -U sathishkumar -c "select * from hospital_management.patient_details"; 
+0

ありがとうございました。 – sat

3

としてなものはありません「データベースの外部への照会」または「データベースへのログインなし」。

クライアントのメタコマンドとpsqlクライアントをSQLコマンドと混在させようとしていますが、これは厳密には不可能です。バックスラッシュメタコマンドはpsqlクライアントによって解釈され、SQLクエリはデータベースサーバによって解釈されます。

psqlのほとんどのメタコマンドは、実際にはデータベースサーバへの(一連の)SQLクエリに変換されます。対話モードでコマンドオプション-Eを使用して起動すると、データベースエンジンに送信するコマンドをpsqlに出力させることができます。試してください:

psql -E mydb 

その後、バックスラッシュコマンドを実行し、出力を観察してください。あなたの質問の残りの部分については、@alerootはすでに良いアドバイスを与えています。

関連する問題