もともと、mysqlをメインでしたが、今回 ubuntuの環境整備ということでインストールした時の記録を取っておくという目的です、
nginxの設定等は関連記事の記事に投稿してあります。
簡単なテストデータベース作成からPDO接続でWebに表示するテストを行いました
【関連記事】
- ubuntu nginx SSL Webサーバー構築
- ubuntu 20.04 nginx php mysql Webサーバー環境整備
- ubuntu 20.04 nginx php postgreSQL 12.5 Webサーバー環境整備(この記事)
目 次
環境確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// ubuntu バージョン khagiwara@sakura3:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.1 LTS Release: 20.04 Codename: focal // nginx バージョン khagiwara@sakura3:~$ nginx -v nginx version: nginx/1.18.0 (Ubuntu) // php バージョン khagiwara@sakura3:~$ php -v PHP 7.4.3 (cli) (built: Oct 6 2020 15:47:56) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies |
PostgreSQLのインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// システム最新化 khagiwara@sakura3:~$ sudo apt update khagiwara@sakura3:~$ sudo apt upgrade // postgreSQLのインストール khagiwara@sakura3:~$ sudo apt install postgresql postgresql-contrib // バージョン確認 ubuntu@sakura4:~$ psql -V psql (PostgreSQL) 12.5 (Ubuntu 12.5-0ubuntu0.20.04.1) |
Roleの作成
PostgreSQLにおけるロールとは、データベースを管理する単位で、ユーザー、パスワード、権限、アクセスグループ等をまとまりとする単位です。 また、その認証の修正((host base authentication) も修正する必要があります。
1 2 3 4 5 6 |
// hg_hba.confを探す。 khagiwara@sakura3:~$ sudo find / -print | grep pg_hba.conf /usr/share/postgresql/12/pg_hba.conf.sample /etc/postgresql/12/main/pg_hba.conf |
/etc/postgresql/12/main/pg_hba.confファイルを編集して postgreSQL を再起動する
1 2 3 4 5 6 7 8 9 10 11 |
// $ sudo vi /etc/postgresql/12/main/pg_hba.conf ・ ・ # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 ・ ・ |
1 2 3 4 5 6 7 8 9 10 |
・ ・ # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident ・ ・ |
1 2 3 4 |
// postgreSQL を再起動 ubuntu@sakura4:~$ sudo systemctl restart postgresql |
インストール後 ユーザーpostgres が作成されている
ユーザーpostgres にチェンジユーザーする
ログイン者ubuntuは sudoグループに所属しているものとする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
// postgres にチェンジユーザー ubuntu@sakura3:~$ sudo su - postgres [sudo] password for ubuntu: postgres@sakura3:~$ // コマンドラインツール psql に入る postgres@sakura3:~$ psql psql (12.5 (Ubuntu 12.5-0ubuntu0.20.04.1)) Type "help" for help. // ゴルインゴの初期ユーザーリストを確認する postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} // 新規にRoleを作成 postgres=# create role khagiwara with login createdb replication; CREATE ROLE // ユーザーリストの確認 postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- khagiwara | Create DB, Replication | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} // ロール khagiwara が ログイン権限、データベース作成、 Replication の権限月で作成された。 |
テーブル作成、データ挿入
posqgresSQLのテストデータベースを作成します。
全国都道府県をエリアごとに分類するデータベースです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// データベース作成 postgres=> create database postal; CREATE DATABASE postal=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-----------+----------+---------+---------+----------------------- postal | khagiwara | UTF8 | C.UTF-8 | C.UTF-8 | postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres ・ ・ // カレントデータベースを作成したデータベースに変更 postgres=> \c postal You are now connected to database "postal" as user "khagiwara". postal=> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* area テーブル作成SQL文 */ create table area ( area_no serial primary key, area_name varchar(255), area_kana varchar(255) ); /* prefecture テーブル作成SQL文 */ create table prefecture ( pref_no serial primary key, area_no int, pref_name varchar(255), pref_kana varchar(255) ); |
作成されたテーブルの確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// areaテーブルの確認 postal=> \d area; Table "public.area" Column | Type | Collation | Nullable | Default -----------+------------------------+-----------+----------+--------------------------------------- area_no | integer | | not null | nextval('area_area_no_seq'::regclass) area_name | character varying(255) | | | area_kana | character varying(255) | | | Indexes: "area_pkey" PRIMARY KEY, btree (area_no) // prefecture テーブルの確認 postal=> \d prefecture; Table "public.prefecture" Column | Type | Collation | Nullable | Default -----------+------------------------+-----------+----------+--------------------------------------------- pref_no | integer | | not null | nextval('prefecture_pref_no_seq'::regclass) area_no | integer | | | pref_name | character varying(255) | | | pref_kana | character varying(255) | | | Indexes: "prefecture_pkey" PRIMARY KEY, btree (pref_no) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
insert into area (area_no,area_name,area_kana) values ( 1, '北海道', 'ホッカイドウ'), ( 2, '東北', 'トウホク'), ( 3, '関東', 'カントウ'), ( 4, '中部', 'チュウブ'), ( 5, '近畿', 'キンキ'), ( 6, '中国', 'チュウゴク'), ( 7, '四国', 'シコク'), ( 8, '九州・沖縄 ', 'キュウシュウオキナワ'); insert into prefecture (pref_no,area_no,pref_name,pref_kana) values ( 1, 1, '北海道', 'ホッカイドウ'), ( 2, 2, '青森県', 'アオモリケン'), ( 3, 2, '岩手県', 'イワテケン'), ( 4, 2, '宮城県', 'ミヤギケン'), ( 5, 2, '秋田県', 'アキタケン'), ( 6, 2, '山形県', 'ヤマガタケン'), ( 7, 2, '福島県', 'フクシマケン'), ( 8, 3, '茨城県', 'イバラキケン'), ( 9, 3, '栃木県', 'トチギケン'), ( 10, 3, '群馬県', 'グンマケン'), ( 11, 3, '埼玉県', 'サイタマケン'), ( 12, 3, '千葉県', 'チバケン'), ( 13, 3, '東京都', 'トウキョウト'), ( 14, 3, '神奈川県', 'カナガワケン'), ( 15, 4, '新潟県', 'ニイガタケン'), ( 16, 4, '富山県', 'トヤマケン'), ( 17, 4, '石川県', 'イシカワケン'), ( 18, 4, '福井県', 'フクイケン'), ( 19, 4, '山梨県', 'ヤマナシケン'), ( 20, 4, '長野県', 'ナガノケン'), ( 21, 4, '岐阜県', 'ギフケン'), ( 22, 4, '静岡県', 'シズオカケン'), ( 23, 4, '愛知県', 'アイチケン'), ( 24, 5, '三重県', 'ミエケン'), ( 25, 5, '滋賀県', 'シガケン'), ( 26, 5, '京都府', 'キョウトフ'), ( 27, 5, '大阪府', 'オオサカフ'), ( 28, 5, '兵庫県', 'ヒョウゴケン'), ( 29, 5, '奈良県', 'ナラケン'), ( 30, 5, '和歌山県', 'ワカヤマケン'), ( 31, 6, '鳥取県', 'トットリケン'), ( 32, 6, '島根県', 'シマネケン'), ( 33, 6, '岡山県', 'オカヤマケン'), ( 34, 6, '広島県', 'ヒロシマケン'), ( 35, 6, '山口県', 'ヤマグチケン'), ( 36, 7, '徳島県', 'トクシマケン'), ( 37, 7, '香川県', 'カガワケン'), ( 38, 7, '愛媛県', 'エヒメケン'), ( 39, 7, '高知県', 'コウチケン'), ( 40, 8, '福岡県', 'フクオカケン'), ( 41, 8, '佐賀県', 'サガケン'), ( 42, 8, '長崎県', 'ナガサキケン'), ( 43, 8, '熊本県', 'クマモトケン'), ( 44, 8, '大分県', 'オオイタケン'), ( 45, 8, '宮崎県', 'ミヤザキケン'), ( 46, 8, '鹿児島県', 'カゴシマケン'), ( 47, 8, '沖縄県', 'オキナワケン'); |
ubuntu nginx php PDO接続準備
1 2 3 4 |
// ubuntu 20.4 + Nginx + php7.4-fpm 用の postgreSQLドライバーをインストール khagiwara@sakura3:~$ sudo apt install php7.4-pgsql |
PDO接続サンプルアプリケーション
作成したデータベースをwebで出力してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<!DOCTYPE html> <html lang="jp"> <head> <meta charset="UTF-8"> <title>PostgreSQL PDO Test</title> </head> <body> <?php define('DB_USER', 'posgreUser'); define('DB_PASSWORD', '***************'); define('DB_NAME', 'postal'); // エラー表示設定:通知系以外全て表示 error_reporting(E_ALL & ~E_NOTICE); try { $pdo = new PDO('mysql:'.DB_NAME.';', DB_USER,DB_PASSWORD); $stmt = $pdo->query("select prefecture.pref_no,area.area_name,". "prefecture.pref_name,prefecture.pref_kana ". "from prefecture ". "inner join area ". "on prefecture.area_no=area.area_no where area.area_no=3;"); $users = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "<pre>"; print_r( $users ); print('接続しました。'); echo "</pre>"; } catch(PDOException $e){ print('ERROR:'.$e->getMessage()); exit; } |
出力結果
メニューに戻る