タグ: PostgreSQL

  • 読了:SoftwareDesign 2025年2月号

    SoftwareDesign 2025年2月号を読み終わった。PostgreSQL 17の機能解説がよかった。今回は次の号がでるまえに読み終えた。まだ1月号を読めていないけれど。

    PostgreSQLのメジャーバージョンアップは、データ移行が必須。毎年メジャーバージョンアップされるけれど、バージョンアップの大変さはまだ変わらない。レプリケーション機能はいい感じ。一部のDBだけレプリケーションできるのは良さそう。VACUUMの制限もなくなっているようなのでいい。今度はメモリの使いすぎの心配はあるけれど。この先は、PostgreSQLの方が主流なんだろう。

    https://amzn.to/40J9jbQ


  • Ubuntu 24.04 LTSにPostgreSQLをインストールしたときのデータファイルの場所

    Ubuntu 24.04に、aptからPostgreSQL(Version 16)をインストールしたときのデータファイルの場所のメモ。

    下記のパスにデータファイルが保存されている。パーミッションが絞り込まれているので、中身をみたい場合はPostgeSQLのユーザにsuしてアクセスする必要がある。

    /var/lib/postgresql/16/main/
  • 急にNpgsqlからAzure Database for PostgreSQLへの接続ができなくなった

    急に.NET6(.NET 3.1~7も)のNpgsqlからAzure Database for PostgreSQLへの接続ができなくなった。

    アプリケーション側からみると、Azure側のPostgreSQLに強制切断されているようにみえるログが出ている。

     ---> Npgsql.NpgsqlException (0x80004005): Exception while writing to stream
     ---> System.IO.IOException: Unable to write data to the transport connection: 既存の接続はリモート ホストに強制的に切断されました。.
     ---> System.Net.Sockets.SocketException (10054): 既存の接続はリモート ホストに強制的に切断されました。
       at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 count)

    こうなると、通常考えるのは、AzureのPostgreSQLで、コネクション数があふれているとか、高負荷状態とか、DBaaSの制約(PostgreSQL設定の外側)が原因じゃないかということ。これを1つ1つ調べていくと、異常なし。Azure側には問題が見当たらず。DBのログをAzureの管理ページがダウンロードして確認してみると、下記のログがあり。

    could not receive data from client: An existing connection was forcibly closed by the remote host.

    AzureのPostgreSQLからみると、クライアント側が切断しているとのこと。

    調べてみると、「Azure Database for PostgreSQL Single server」は、ルート証明書が変更されていることがわかった。.NETで、Ngpsqlを使っている場合は、「Baltimore CyberTrust Root」と「DigiCert Global Root G2」が使うWindows(Windows Server含む)にインストールされている必要があるとのこと。ルート証明書の確認をすると、「DigiCert Global Root G2」が存在していなかった。これが原因なので、下記のマイクロソフトの内容に従い、確認して作業した。

    Understanding the changes in the Root CA change for Azure Database for PostgreSQL Single server
    https://learn.microsoft.com/en-us/azure/postgresql/single-server/concepts-certificate-rotation#what-do-i-need-to-do-to-maintain-connectivity

    今回足りていなかったのは、「DigiCert Global Root G2」なので、Digicertのサイトからルート証明書をダウンロードした。

    https://www.digicert.com/kb/digicert-root-certificates.htm#roots
    (「Download DER/CRT」をクリックして、CRTファイルをダウンロード)

    CRTファイルを、ルート証明書が足りていないサーバに持っていき、ダブルクリックして、ウィザードからルート証明書をインストールした。配置場所は自動選択させることでルートのところにインストールされた。

    なお、ルート証明書のインストール後のOS再起動はしなくても、ルート証明書を使い始めた。

  • PostgreSQLのDBに接続しようとしたら、エラーで接続できない

    ■環境

    Ubuntu Server 18.04.2

    PostgreSQL 10

    ■発生したエラー

    zen@redmine:~$ psql -d redmine -U dbuser -W
    Password for user dbuser:
    psql: FATAL:  Peer authentication failed for user "dbuser"

    ■編集したファイル

    /etc/postgresql/10/main/pg_hba.conf

    ★書き換え前

    # "local" is for Unix domain socket connections only
    local   all             all                                     peer

    ★書き換え後

    # "local" is for Unix domain socket connections only
    local   all             all                                     md5

    ■Postgresqlのサービス再起動

    sudo service postgresql restart

    ■これで成功した!

    zen@redmine:~$ psql -d redmine -U dbuser -W
    Password for user dbuser:
    psql (10.5 (Ubuntu 10.5-0ubuntu0.18.04))
    Type "help" for help.
    
    redmine=>

    ■参考にしたURL

    https://qiita.com/tomlla/items/9fa2feab1b9bd8749584