互換性メモ
このページでは、PostgreSQLや他のコンポーネントとの、Npgsqlの互換性の状態をまとめています。そして、いくつかの重要な問題を文書化しています。
PostgreSQL
私たちは、5年前から現在サポートされている、すべてのバージョンのPostgreSQLと互換性を保つことを目指しています。初期のバージョンは、まだ、動作するかもしれませんが、私たちは、それらに対して継続的なテストを実行したり、それらの問題を解決することを約束しません。
ADO.NET
Npgsqlは、ADO.NET互換のプロバイダであるため、他の.NETデータベース・ドライバと同じAPIを持っています。そして、同じように動作するはずです。あなたが、標準ではない動作に気がついたときは、お知らせください。
.NET Framework/.NET Core/mono
Npgsqlは、.NET Coreで実行できる.NET Standard 2.0と同様に、現在.NET Framework 4.5と4.5.1を対象としています。それは、検証され、mono上でも適切に実行します。
Amazon Redshift
Amazon Redshiftは、もともと、PostgreSQL 8.0.2に基づいた、クラウドベースのデータウェアハウスです。加えて、その性質上、一部の機能は削除され、その他の機能は変更され、PostgreSQLとの互換性はありません。私たちは、できる限り、Redshiftをサポートしようとしています。遭遇した問題について、私たちに、知らせて下さい。
まず、RedshiftとPostgreSQLについて、たくさんの役に立つ互換性情報が含まれている、Amazonのページを確認してください。
その他の既知の問題:
Additional known issues:
- あなたが、SSLで接続したい場合、接続文字列に、Server Compatibility Mode = Redshiftが、含まれている必要があります。それ以外の場合には、ssl_renegotiation_limitに関する接続エラーが発生します。
- データベースで計算されたID値を持つEntity Frameworkは、シーケンスをサポートしていないため、Redshiftでは機能しません。(issue #544を参照)。
pgbouncer
Npgsqlは、PgBouncerで適切に動作しますが、知っておくべきいくつかの癖があります。
- 多くの場合、あなたは、接続文字列に、Pooling=falseを指定することによって、Npgsqlの内部接続プールをオフにすることを望むでしょう。
- あなたが、PgBouncerと一緒に、Npgsqlプールを維持し続け、PgBouncerのトランザクションやステートメント・モードを使用したい場合、続いて、あなたは、接続文字列で、No Reset On Close = trueと指定する必要があります。これは、接続が、これらのモードでは、意味がない、Npgsqlのプールに戻ったとき、実行されるNpgsqlの接続リセット・ロジック(DISCARD ALL)を無効にします。
- バージョン3.1より以前では、Npgsqlは、接続するとき、statement_timeoutスタートアップ・パラメータを送信しますが、このパラメータは、pgbouncerでは、サポートされていません。これを回避するには、接続文字列でCommandTimeout = 0を指定します。そして、その次に、あなたのNpgsqlCommandオブジェクトで、CommandTimeoutプロパティを手作業で設定します。バージョン3.1では、もはや、statement_timeoutを送信しません。