PostgreSQL 11.4にC#で接続する(Npgsql使用)

C#からPostgreSQL 11.4に接続してみます。
ライブラリは以前利用したNpgsqlを使用します。
PostgreSQL 9.3にC#で接続する(Npgsql使用)



Npgsql



接続ライブラリのNpgsqlはNuGetで導入できるようです。
Npgsql

今回はインストーラーでインストールしてみます。
以前とインストーラーが公開されるURLが変更になったようで、現在はgithubのリリースから取得できます。
https://github.com/npgsql/npgsql/releases

997_01.png

「Npgsql-4.0.7.msi」をダウンロードしました。
インストールを進めます。

997_02.png

997_03.png

インストールタイプは「Npgsql GAC Installation」も選択します。

997_04.png

997_05.png

警告が表示されますが「はい」を選択してインストールを続行します。

997_06.png

997_07.png

これでインストール完了です。




Npgsql.dllの場所



Npgsql.dllがどこにインストールされたのか調べてみると、

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_4.0.7.0__5d8b90d52f46fda7


ここに保存されていました。
※バージョンによってパスは変わると思います。

今回、Windows 10には開発環境をインストールしていません。
csc.exeでビルドしたかったので、Npgsql.dllをソースと同じ階層にコピーしておきました。



サンプルソース



簡単な登録、検索のサンプルはこのようになりました。

・Sample.cs


  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using Npgsql;
  6. public class Sample {
  7.         
  8.     [STAThread]
  9.     public static void Main(string[] args) {
  10.         StringBuilder sb = new StringBuilder();
  11.         sb.Append("Server=192.168.1.103;");
  12.         sb.Append("Port=5432;");
  13.         sb.Append("User Id=pgadmin;");
  14.         sb.Append("Password=P@ssw0rd;");
  15.         sb.Append("Database=sample");
  16.         string connString = sb.ToString();
  17.         using (var con = new NpgsqlConnection(connString)) {
  18.             con.Open();
  19.             //データ登録
  20.             var cmd = new NpgsqlCommand(@"insert into test(id, name) values (:id, :name)", con);
  21.             cmd.Parameters.Add(new NpgsqlParameter("id", DbType.Int32) { Value = 1 });
  22.             cmd.Parameters.Add(new NpgsqlParameter("name", DbType.String) { Value = "テストデータ" });
  23.             cmd.ExecuteNonQuery();
  24.             //データ検索
  25.             cmd = new NpgsqlCommand(@"select * from test", con);
  26.             var dataReader = cmd.ExecuteReader();
  27.             while (dataReader.Read()) {
  28.                 Console.WriteLine("{0},{1}", dataReader["id"], dataReader["name"]);
  29.             }
  30.         }
  31.         
  32.     }
  33. }




csc.exeを使用してコンパイルするためのバッチファイルはこのような感じです。

・build.bat


@echo off
set csc="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe"
set opt=/nologo
set recurse=/r:Npgsql.dll

%csc% %opt% %recurse% Sample.cs



build.batを実行すると「Sample.exe」が生成されます。
実行すると、ちゃんと登録と登録したデータの検索が行えているようです。

997_08.png



DataAdapterを使用した検索



DataAdapterを使用した検索も試してみます。


  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using Npgsql;
  6. public class Sample {
  7.         
  8.     [STAThread]
  9.     public static void Main(string[] args) {
  10.         StringBuilder sb = new StringBuilder();
  11.         sb.Append("Server=192.168.1.103;");
  12.         sb.Append("Port=5432;");
  13.         sb.Append("User Id=pgadmin;");
  14.         sb.Append("Password=P@ssw0rd;");
  15.         sb.Append("Database=sample");
  16.         string connString = sb.ToString();
  17.         using (var con = new NpgsqlConnection(connString)) {
  18.             con.Open();
  19.             //DataAdapterよるデータ検索
  20.             var dataAdapter = new NpgsqlDataAdapter(@"select * from test", con);
  21.             var dataSet = new DataSet();
  22.             dataAdapter.Fill(dataSet);
  23.             foreach(DataRow row in dataSet.Tables[0].Rows) {
  24.                 Console.WriteLine("{0},{1}", row["id"], row["name"]);
  25.             }
  26.         }
  27.         
  28.     }
  29. }




【参考URL】
PostgreSQL 9.3にC#で接続する(Npgsql使用)

FreeBSD 12 PHP 7.3からPostgreSQL 11に接続する

FreeBSD 12にnginxやPHP、PostgreSQLをインストールしました。
FreeBSD 12.0-RELEASEを仮想環境(KVM)にインストール
FreeBSD 12 nginx + php7.3-fpmの動作環境構築(pkg使用)
FreeBSD 12にPostgreSQL 11.1をインストールし、外部接続を許可する

この環境を使って、PHP 7.3からPostgreSQL 11.1に接続してみます。

こちらを参考にしました。
PHP 7.2からPostgreSQL 11に接続する
FreeBSD 10.0のPHP5からPostgreSQLに接続する



接続ライブラリのインストール



phpからPostgreSQLに接続するためのPDO拡張をインストールします。


# pkg install php73-pdo_pgsql



サンプルプログラムを作成して接続をテストしました。


  1. <?php
  2. try {
  3.     // ローカルのデータベース「sample」に
  4.     // ユーザー名「pgadmin」、パスワード「password」で接続
  5.     $db = new PDO ('pgsql:dbname=sample;host=localhost', 'pgadmin', 'P@ssw0rd');
  6.     
  7.     echo 'PostgreSQLと接続成功'.PHP_EOL;
  8.     // 切断
  9.     unset($db);
  10. } catch (PDOException $e) {
  11.     echo $e->getMessage();
  12. }



実行結果


# php sample.php
PostgreSQLと接続成功



接続できました。



クエリーの実行



データの登録や検索を行うサンプルも実行してみます。


  1. <?php
  2. try {
  3.     // ローカルのデータベース「sample」に
  4.     // ユーザー名「pgadmin」、パスワード「password」で接続
  5.     $db = new PDO('pgsql:dbname=sample;host=localhost', 'pgadmin', 'P@ssw0rd');
  6.     
  7.     echo 'PostgreSQLと接続成功'.PHP_EOL;
  8.     // データを追加
  9.     $db->exec("INSERT INTO test (id, value) VALUES (1, 'テスト')");
  10.     // データの検索
  11.     $stmt = $db->query('SELECT * FROM test');
  12.     while($row = $stmt->fetch()) {
  13.         echo $row['id'].':'.$row['value'].PHP_EOL;
  14.     }
  15.     
  16.     // 切断
  17.     unset($db);
  18. } catch (PDOException $e) {
  19.     echo $e->getMessage();
  20. }



動いてくれました。


# php sample.php
PostgreSQLと接続成功
1:テスト

FreeBSD 12にPostgreSQL 11.1をインストールし、外部接続を許可する

FreeBSD 12にPostgreSQL 11.1をインストールしてみます。

過去の手順を参考にしました。
FreeBSD 10.1にPostgreSQL 9.4.4をインストール


PostgreSQLのインストール



pkg installでインストール。


# pkg install postgresql11-server



自動的に、「postgres」ユーザーが作成されます。
以前は「pgsql」というユーザーだったのですが、変更されたようです。

/etc/rc.confを編集。


# vi /etc/rc.conf



「postgresql_enable="YES"」を追加します。


keymap="jp.kbd"
ifconfig_re0="inet 192.168.1.104 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
sshd_enable="YES"
nginx_enable="YES"
php_fpm_enable="YES"
postgresql_enable="YES"




データベースの初期化と起動を行います。


# /usr/local/etc/rc.d/postgresql initdb
# /usr/local/etc/rc.d/postgresql start



これでインストールと起動は完了です。
接続をテストしてみます。


# psql -h localhost -U postgres -d postgres
psql (11.1)
Type "help" for help.

postgres=#





ユーザーの作成



pgadminというユーザーを作成してみます。


# su postgres
$ createuser --pwprompt --interactive pgadmin
Enter password for new role: [パスワード入力]
Enter it again: [パスワード再入力]
Shall the new role be a superuser? (y/n) y




接続テストのついでに、データベースやテーブルを作成してみます。


# psql -U pgadmin -d postgres
psql (11.1)
Type "help" for help.

postgres=# create database sample;
CREATE DATABASE

postgres=# create table test (id int, value text);
CREATE TABLE

postgres=# insert into test (id, value) values (1, 'test');
INSERT 0 1

postgres=# select * from test;
id | value
----+-------
1 | test
(1 row)






外部接続許可



外部から接続できるように構成します。
postgresql.confを編集。
※「/usr/local/pgsql/data/postgresql.conf」から
「/var/db/postgres/data11/postgresql.conf」に変更されたようです。


# vi /var/db/postgres/data11/postgresql.conf



listen_addressesを'localhost'から'*'に変更。


#listen_addresses = 'localhost'
listen_addresses = '*'



pg_hba.confを編集。


# vi /var/db/postgres/data11/pg_hba.conf



「IPv4 local connections:」に、接続を許可するセグメントを追加します。


# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.1.0/24         md5



編集が終わったら、PostgreSQLを再起動。


# service postgresql restart




こんなPythonのサンプルで確認しました。


  1. # -*- coding:utf-8 -*-
  2. import psycopg2
  3. con = psycopg2.connect(
  4.     host = "192.168.1.104",
  5.     port = 5432,
  6.     database="sample",
  7.     user="pgadmin",
  8.     password="P@ssw0rd")
  9. con.close()
  10. print('ok')




外部から接続出来ました。


$ python sample.py
ok


PostgreSQL 11.1をUbuntu 18.04へインストールし、外部から接続する

PostgreSQL 11が公開されました。
Ubuntu Server 18.04へインストールしてみます。

過去記事のこちらを参考にしました。
Postgresql 10.3をUbuntu Server 18.04にインストールし、外部アクセスを許可する
https://wiki.postgresql.org/wiki/Apt


リポジトリの追加



/etc/apt/sources.list.d/pgdg.listを作成
リポジトリのパスを記載します。


$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'



認証キーを追加


$ sudo apt-get install curl ca-certificates
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -



リポジトリを更新


$ sudo apt update
$ sudo apt upgrade



インストール実行


$ sudo apt install postgresql-11



バージョン11.1がインストールできました。


$ sudo su - postgres
$ psql
psql (11.1 (Ubuntu 11.1-1.pgdg18.04+1))
Type "help" for help.

postgres=#






外部接続許可



外部からの接続を許可します。
postgresql.confを編集。


$ sudo vi /etc/postgresql/11/main/postgresql.conf



59行目付近、listen_addressesのコメントを解除。
「localhost」から「*」に変更し、すべての通信を受け入れます。


# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '*'




続いて、pg_hba.confを編集。


$ sudo vi /etc/postgresql/11/main/pg_hba.conf




認証を受け付けるIPの範囲を追記します。


# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.1.1/24         md5




編集が終わったらサービスをリスタート。


$ sudo service postgresql restart



これで外部から接続できるようになりました。



ユーザーの作成



接続用に「pgadmin」というユーザーを作成してみます。


$ sudo su - postgres
$ createuser --pwprompt --interactive pgadmin
Enter password for new role: [パスワード入力]
Enter it again: [上記とパスワード入力]
Shall the new role be a superuser? (y/n) y




作成したユーザーで接続できるかテスト。


$ psql -h localhost -U pgadmin -d postgres
Password for user pgadmin:
psql (11.1 (Ubuntu 11.1-1.pgdg18.04+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.



データベースやテーブルを作成してみます。


postgres=# create database sample;
CREATE DATABASE
postgres=# \c sample
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "sample" as user "pgadmin".
sample=# create table test (id int, value text);
CREATE TABLE
sample=# insert into test (id, value) values (1, '日本語テスト');
INSERT 0 1
sample=# select * from test;
id |    value    
----+--------------
1 | 日本語テスト
(1 row)

sample=#



問題なさそうです。


Postgresql 10.3をUbuntu Server 18.04にインストールし、外部アクセスを許可する

Postgresql 10.3をUbuntu Server 18.04にインストールしてみます。
こちらを参考にしました。
Postgresql 10.3をUbuntu Server 16.04にインストールし、外部アクセスを許可する
https://wiki.postgresql.org/wiki/Apt


リポジトリの追加



/etc/apt/sources.list.d/pgdg.listを作成
リポジトリのパスを記載します。


$ echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" | sudo tee -a /etc/apt/sources.list.d/pgdg.list



pgdg.listを作成したら認証キーを追加


$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -



リポジトリを更新


$ sudo apt update
$ sudo apt upgrade



インストール実行


$ sudo apt install postgresql-10



バージョン10.3がインストール出来ました。


$ sudo su - postgres
postgres@:~$ psql
psql (10.3 (Ubuntu 10.3-1.pgdg18.04+1))
Type "help" for help.

postgres=#





外部接続許可



外部からの接続を許可します。
postgresql.confを編集。


$ sudo vi /etc/postgresql/10/main/postgresql.conf



60行目付近、listen_addressesのコメントを解除
「localhost」から「*」に変更し、すべての通信を受け入れます。


# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '*'



続いて、pg_hba.confを編集。


$ sudo vi /etc/postgresql/10/main/pg_hba.conf



認証を受け付けるIPの範囲を追記します。


# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.1.1/24         md5



編集が終わったらサービスをリスタート。


$ sudo service postgresql restart



これで外部から接続できるようになります。



ユーザーの作成



接続用に「pgadmin」というユーザーを作成してみます。


$ sudo su - postgres
$ createuser --pwprompt --interactive pgadmin
Enter password for new role: [パスワード入力]
Enter it again: [上記とパスワード入力]
Shall the new role be a superuser? (y/n) y



作成したユーザーで接続できるかテスト。


$ psql -h localhost -U pgadmin -d postgres
Password for user pgadmin:
psql (10.3 (Ubuntu 10.3-1.pgdg18.04+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=#



ついでにデータベースやテーブルを作成してみます。


postgres=# create database sample;
CREATE DATABASE

postgres=# \c sample
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "sample" as user "pgadmin".

sample=# create table test (id int, value text);
CREATE TABLE

sample=# insert into test (id, value) values (1, '日本語テスト');
INSERT 0 1

sample=# select * from test;
id |    value    
----+--------------
1 | 日本語テスト
(1 row)

sample=#



いい感じです。

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ