2017-11-24 24 views
0

を指定するパラメータを使用しては、窓10プリペアドステートメント - pgadmin4を使用して、テーブル名

に9.6をpostgresに私は以下のコードのように準備されたステートメントでテーブル名を指定するパラメータを使用しようとしています。しかし、以下のような構文エラーが出ます。私はwhereの条件でパラメータを使用できることに注意してください。

クエリ

prepare mySelect(text) as 
    select * 
     from $1 
     limit 100; 

execute mySelect('some_table'); 

pgAdminでメッセージ

ERROR: syntax error at or near "$1" 
LINE 3:  from $1 
       ^
SQL state: 42601 
Character: 50 
+0

@Pavelはそれは不可能だと言っていますが、その状況で関数を作成してEXECUTE – CanFil

+0

を使用すると、上記のコンテキストの例を追加できますか? – user3206440

答えて

2

ことはできません。準備文は永続的な実行計画であり、実行計画には悲観的なデータソースが含まれているため、テーブル、列名を変更することはできません。

テーブル、列を変更すると、クエリのセマンティクスが変更されます。異なる実行プランがあり、この動作はプリペアドステートメントでは実行できません。準備されたステートメントの主な使用例は、実行計画の再利用です。しかし、いくつかの主要な制限があります - いくつかのパラメータだけを変更することができます。

+0

これに代わるものは、異なるテーブル間で特定のクエリをよりよく再利用するためです。また、それをdiffカラム名全体にわたってさらに拡張するには? – user3206440

+0

@ user3206440 - 代案はありません。申し訳ありません。計画時間は通常1ms未満と非常に短く、問題ではありません。たびに - 文脈に依存します。うまく設計されたデータベーススキーマがあれば、共有クエリには意味がありません。 –

関連する問題