web-dev-qa-db-ja.com

エラー:不明からテキストへの変換関数が見つかりませんでした

PostgreSQLで、selectステートメントの1つにエラーが発生します。私は答えをウェブで検索し、手ぶらで出てきました。別の質問で与えられた答えは私の問題に合いませんでした。

ERROR:  failed to find conversion function from unknown to text
********** Error **********
ERROR: failed to find conversion function from unknown to text
SQL state: XX000

私のクエリは次のようになります。

Select * 
from (select 'string'  as Rowname, Data
      From table)
Union all
     (select 'string2' as Rowname, Data
      From table)

これを行うポイントは、あるポイントでの行が何であるかを指定することです。行の名前である文字列。これが私の望ましい出力です:

Rowname Data 
string  53
string2 87

このエラーを修正するための可能な方法はありますか?

11
Padagomez

あなたの声明にはいくつかの問題があります。しかし、エラーメッセージは、文字列リテラル'string'の(まだ不明な)データ型を宣言するために明示的なキャストが必要であることを示しています:

SELECT text 'string' AS rowname, data FROM tbl1
UNION ALL
SELECT 'string2', data FROM tbl2

SELECTクエリの1つのUNIONにキャストするだけで十分です。通常、最初のもので、列名も決定されます。タイプが不明な後続のSELECTリストは一列に並びます。

他のコンテキスト(VALUESに付加されたINSERT句など)では、Postgresはターゲット列からデータ型を取得し、適切な型に自動的に強制しようとします。

16
Select * from (select CAST('string' AS text) as Rowname, Data
  From table) Union all
 (select CAST('string2' AS text) as Rowname, Data
  From table)

参照