Skip to content

MS_PostgreSQLNpgsql

nishi_74322014 edited this page Aug 18, 2026 · 1 revision

PostgreSQL + NpgSql

概要

  • PostgreSQL 環境構築。
  • NpgSql での接続テスト。

詳細

PostgreSQLとpgAdminダウンロードしてインストール

PostgreSQLをダウンロードしてインストール

Windows x86-64 × バージョンの download をクリックし、
遷移先のページで [start the download now] をクリック。

pgAdminダウンロードしてインストール

既定で CUI の psql を使用できるが、GUI を使用するなら pgAdmin をインストールする。

補足(最新化:もっと手軽な構築方法): 現在は、
インストーラを使わずに Docker で立てるのが最も手軽。

docker run --name pg -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres:16

クライアントも、pgAdmin(現在は Web アプリ形式の pgAdmin 4)のほか、
A5:SQL Mk-2Azure Data Studio 後継の VS Code + PostgreSQL 拡張
DBeaver などが使える。

PostgreSQLを起動してアプリケーションから使うまで。

PostgreSQLを起動する。

  • 「サービス」から「postgresql-x64-x.x」を開始するか、
  • コマンドで開始する場合は、net start postgresql-x64-x.x と開始する。

pgAdminを起動して接続する。

SQLを発行する(DDLを発行してテーブルを作成する)。

作成したテーブルに対してSQLを発行してデータを参照

補足(postgres データベースを業務に使わない): 既定の postgres DB は
管理用・接続確認用のものなので、
検証であっても CREATE DATABASE で専用の DB を作るほうがよい。
スキーマも、既定の public ではなく業務ごとに切ると
権限管理がしやすい(PostgreSQL 15 以降は
public スキーマへの CREATE 権限が既定で剥奪されている)。

Visual StudioからNpgSqlを使用して接続・実行する。

  • 新規作成 → プロジェクト → コンソール アプリケーションを作成する。

  • NuGet から NpgSql を検索してインストールする。

  • 以下のコードを記述してデバッグ実行するとレコード件数が返る。
    (接続文字列のアカウントは、system とインストール時に入力したパスワードなど
    環境に合わせて変更すること。)

using Npgsql;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
           NpgsqlConnection cn = new NpgsqlConnection("HOST=localhost;DATABASE=postgres;USER ID=xxxx;PASSWORD=xxxx");
           cn.Open();
           NpgsqlCommand cmd = new NpgsqlCommand("SELECT COUNT(*) FROM SHIPPERS", cn);
           Console.WriteLine(cmd.ExecuteScalar().ToString());

           Console.ReadKey();
        }
    }
}

補足(最新化:現在の書き方): 接続は using で確実に破棄し、
I/O は非同期 API を使う(ADO.NET)。

await using var cn = new NpgsqlConnection(
    "Host=localhost;Database=sample;Username=app;Password=xxxx");
await cn.OpenAsync();
await using var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM shippers", cn);
Console.WriteLine(await cmd.ExecuteScalarAsync());

なお、Npgsql 7 以降は NpgsqlDataSource が推奨されており、
接続プールと型マッピングの構成を 1 か所にまとめられる。

await using var ds = NpgsqlDataSource.Create(connectionString);
await using var cmd = ds.CreateCommand("SELECT COUNT(*) FROM shippers");

補足(識別子の大文字小文字): PostgreSQL は
引用符で囲まない識別子を小文字に畳み込む
このため SELECT COUNT(*) FROM SHIPPERS
実際には shippers を探しに行く。
CREATE TABLE "SHIPPERS" のように引用符付きで大文字で作成した場合は、
参照時も "SHIPPERS" と引用符が必要になる。

SQL Server(照合順序に依存、既定は大文字小文字を区別しない)や
Oracle(引用符なしは大文字に畳み込む)とは挙動が逆なので、
クロスDB対応では要注意の差異である。
実務ではすべて小文字・引用符なしで統一するのが無難。

スキーマを作成する。

PostgreSQL は SQL Server と同様に、
DB を Drop & Create すればクリーンナップが可能。

スキーマを作成する。

補足: DROP DATABASE他の接続が残っていると失敗する
pgAdmin の接続も含めて切断してから実行するか、
PostgreSQL 13 以降であれば DROP DATABASE name WITH (FORCE); を使う。

参考

補足(Npgsql と EF Core): EF Core から PostgreSQL を使う場合は
Npgsql.EntityFrameworkCore.PostgreSQL を導入する
Entity Framework Core)。
ライセンスは PostgreSQL ライセンス(BSD 相当)で、
商用製品への組み込みに制約は無い
ADO.NETデータプロバイダの MySQL の項と対照的)。


Tags: 移行, データアクセス, ADO.NET

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally