テーブルから次のSQLステートメントを取得し、バインド変数を使用して値を置き換えています。ステートメントを実行すると、構文エラーが発生します。lower()関数の結果として発生しているようですが、これを正しく使用していると思います。psqlを使用してステートメントを手動で実行しようとしましたが、指定した値で正常に機能します。誰かがこれについて何かアイデアを持っていますか?$$の'を切り替えてみましたが、効果がありませんでした。
声明
SELECT column_name
FROM information_schema.columns
WHERE table_name=lower(':1')
and column_name=lower(':2')
置換された値を持つ期待される基本的なステートメント
SELECT column_name
FROM information_schema.columns
WHERE table_name=lower('MyTableName')
and column_name=lower('MyColumnName')
postgresqlによって実行されるステートメント
SELECT column_name
FROM information_schema.columns
WHERE table_name=lower('((E'RWOL_TMA_ROADWORKS'))')
and column_name=lower('((E'TPHS_CWAY_RESTRICT_TYPE'))')
C#のエラー
ERROR: 42601: syntax error at or near \"MyTableName\"
PostgreSQLログファイルのエラー
2012-04-16 11:36:15 BST ERROR: syntax error at or near "RWOL_TMA_ROADWORKS" at character 80
2012-04-16 11:36:15 BST STATEMENT: SELECT column_name FROM information_schema.columns WHERE table_name=lower('((E'RWOL_TMA_ROADWORKS'))') and column_name=lower('((E'TPHS_CWAY_RESTRICT_TYPE'))')
編集:取得および実装コードはC#で記述されています。私は、データベース接続の基本クラスとnpgsqlプロバイダーファクトリを使用して、接続を確立し、クエリを実行し、データを取得します。このメソッドは、lower()関数を使用しようとするこのメソッドを除いて、変数などをバインドするこのメソッドを使用する他のすべてのクエリで機能します。
編集:バインディングエージェントが値の引用を処理できるように引用符を完全に削除しようとしましたが、これにより同じ構文エラーが発生しました。
編集:ロギングを有効にし、postgresqlが実行されているという実際のステートメントを追加しました。