web-dev-qa-db-ja.com

PostgreSQLの「stringtype = unspecified」動作をデフォルトとして設定できますか?

Java enumフィールドをPostgreSQL 9.6のenum列として保存しようとしています。フィールドを@Enumerated(STRING)としてマップすると、Hibernateは単純にenum名を列として使用しますこれは、読み取りでは素晴らしく機能します(文字列表現を取得し、一致して戻ります)が、サーバーは、書き込み時に型の不一致について不平を言います:expression is of type character varying

PostgreSQL JDBCドライバー にはパラメーターstringtypeがあり、サーバーに文字列値の適切な列タイプを推論し、stringtype=unspecifiedを使用すると列挙値が正常に取得されます。ただし、JDBC接続文字列が外部から提供される環境にアプリケーションをデプロイするため、stringtypeプロパティを追加することは現実的ではありません。

デフォルトで接続をstringtype=unspecifiedとして扱うようにサーバーを構成する方法はありますか(SETコマンドを使用するなど)?

3

残念ながら答えはノーです。 stringtypeはサーバーパラメータではありません。これは、JDBC独自のクライアントパラメータです。ここで機能を確認してください。

org.postgresql.jdbc.PgConnection.getStringVarcharFlag()

そしてここ

org.postgresql.jdbc.PgPreparedStatement.getStringType()

JDBCがVARCHARプロパティに従ってパラメータタイプをUNSPECIFIEDまたはstringtypeタイプに設定することがわかります。

1
Sahap Asci