sql >> データベース >  >> RDS >> PostgreSQL

入力のタイプが不明であるため、ポリモーフィックタイプを判別できませんでした

    ここでの問題は、名前としての'' as nameです。 実際には値のタイプを指定しません。 unknownです タイプ。PostgreSQLは通常、挿入する列や渡す関数などから実際のタイプを推測します。

    この場合、それをarray_aggに渡します。 、これは polymorphc 関数。疑似タイプanyelementの入力を受け取ることができます 、これは実際には「実行時にそれを理解する」という意味です。

    array_to_stringを除いて、PostgreSQLはそれを理解します。 実際にはtext[]を取りません 入力として。 anyarrayが必要です -anyelementなどの別のポリモーフィックタイプ アレイ用。

    したがって、クエリには、その'' as nameのタイプをPostgreSQLに通知するものは何もありません。 は。 textを意味していると推測できます 、しかしそれは少しうるさいです。だからそれは文句を言う。この問題は次のように単純化されます:

    regress=> SELECT array_to_string(array_agg(''), ',');
    ERROR:  could not determine polymorphic type because input has type "unknown"
    

    これを解決するには、型付きリテラルを記述します:

    TEXT '' AS name
    

    またはキャストを使用する:

    CAST('' AS text) AS name
    

    またはPostgreSQLの省略形:

    ''::text
    

    例:

    regress=> SELECT array_to_string(array_agg(TEXT ''), ',');
     array_to_string 
    -----------------
    
    (1 row)
    
    regress=> SELECT array_to_string(array_agg(''::text), ',');
     array_to_string 
    -----------------
    
    (1 row)
    
    regress=> SELECT array_to_string(array_agg(CAST('' AS text)), ',');
     array_to_string 
    -----------------
    
    (1 row)
    



    1. MysqlでBETWEEN句を使用して英数字フィールドを使用するにはどうすればよいですか?

    2. プレイスカラでのMagicのColumnNotFoundの問題

    3. PostgreSQLでコンマ区切りリストとしてクエリ結果を返す方法

    4. Mysqlパスワードハッシュ方式の新旧