2017-09-20 8 views
0

のようなクエリを実行するためにどのような方法があります:SELECT * FROM 17187::regclass;PostgreSQLでテーブルからOIDを選択する方法はありますか?

どこSELECT 17187::regclass;tablename

それはEXECUTEによって関数内でこれを実現するのは簡単ですが、私は機能せずにそれを行うには思ったんだけど。

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

+0

なぜそれをしたいですか? –

+0

'select * chr(102)|| rom tablename' - 実行可能ですが、なぜですか? –

+0

おそらく' EXECUTE'が必要ですが、あなたはすでにそれを知っています。 –

答えて

1

実行する必要があります。理由は次のとおりです。

SQLクエリは実行時にパイプラインを経由します。これは、次のように大まかに行われます。

  1. クエリは、識別子のために解析される対
  2. 値該当する場合は、「ポータル」が作成され、パラメータ
  3. 該当する場合に記入値リテラルは、クエリが計画され、最適化されています
  4. クエリが実行されます。

結果として、値リテラルのみをパラメータ化でき、識別子をパラメータ化することはできません。また、ユーティリティー・ステートメントは決して計画されておらず、パラメーター化されていません(このディスカッションの末尾にはありますが、create userのパラメーターを設定することはできません)。

このようなことは根本的に不可能ですが、現時点ではPostgreSQLの動作はサポートされていません。

関連する問題