• Skip to main content
  • Skip to primary sidebar
  • ホーム
  • お問い合わせ

ハイパー仕事し隊

思い立った吉日!イロイロ試してオンリーワンの起業家を目指してます!

現在の場所:ホーム / ウェブアプリ関連 / PostgreSQL の全体像を、実際に触ってみてサクッと学ぶ

PostgreSQL の全体像を、実際に触ってみてサクッと学ぶ

2018年7月15日

postgresql

PostgreSQL とは、オープンソースのデータベース管理システム (Relational Database Management System) です。

MySQL と並び人気のある DBMS ですね。

Django (Python のウェブフレームワーク) でよく使われてもいるようです。

違いが気になる方は、「MySQL と PostgreSQL の違いを知る」も参考にしてください。

本記事では、Vagrant で起動した Ubuntu 14.04 に PostgreSQL をインストールし、PostgreSQL についてサクッと学んで行きたいと思います。

環境

Windows 上の Vagrant を使って Ubuntu をインストールし、そこで PostgreSQL をインストールします。

  • Windows 7 SP1
  • Vagrant 2.1.1
  • Ubuntu 14.04 (Trusty)
  • PostgreSQL 9.3.23

インストール

まずは、Vagrant で Ubuntu 14.04 (Trusty) 環境を準備します。こちらのサイトから Vagrantfile のダウンロードしてください。

「Vagrant を使うと仮想マシン構築がすごいラク!まずはインストールしよう!」

からインストールの詳細は確認できますので、参考にしてくださいね。

Vagrantfile をダウンロード/生成しましたら、コマンドプロンプトからそのファイルの場所に移動し、

vagrant up
vagrant ssh

を実行し、Ubuntu に接続します。

Ubuntu のレポジトリはデフォルトで、PostgreSQL パッケージを含んでいますので、apt-get で簡単にインストールすることができます。

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

 

PostgreSQL Role と Database

PostgreSQL においては接続の為のログインの管理やデータベースなどへの各権限の設定を Role 単位で行います。

Role は「ユーザ」とユーザを論理的にまとめた「グループ」の2つの用途で利用ができます。説明をしやすくするため、本記事では Role = ユーザーとして説明します。

PostgreSQL へのログインする際の認証の方法はいくつかありますが、

  • Ident : DB の所有者がシェルを実行している OS のユーザ名と一致するかで認証
  • MD5 : MD5-hashed のパスワード認証
  • Trust : 認証せず、DB への接続許可

などがあり、デフォルトでは、”Ident” 認証となっています。

PostgreSQL インストール時に、自動的に “postgres” アカウントが作成され、この “postgres” アカウントは 、デフォルトの “Postgres” role に紐付いています。

なので、Ubuntu (OS) 側のユーザーアカウントを “postgres” に変更しないと、認証されないことになります。

sudo -i -u postgres

これで Ubuntu のユーザー “postgres” に変更できました。これで Postgres にアクセスする準備が整いました。。(いやー、初心者泣かせのフローですよね。。笑)

psql

これで、PostgreSQL にログインができました。

ログアウトするには、

\q

とすれば、OK です。

いちいちアカウントを変更するの面倒な場合、”postgres” アカウントに “sudo” を使ってログインすることも可能です。

sudo -u postgres psql

以降の説明では、”postgres” アカウントに変更した場合、の説明を行いますが、sudo -u postgres を付ければ同じ結果が得られますので、”postgres” アカウントに変更したくない場合は、必要に応じてそう読み取ってくださいね。

Role の作成

Role (ユーザー) はまだ、デフォルトで作成された “postgres” しかありません。

それでは、新しい Role(ユーザー) を追加していきましょう。まずは Ubuntu ターミナルにてこのようにタイプします。

createuser --interactive

オプションの –interactive を追加したので、下記のように対話型で Role(ユーザー) が作成できまうす。ひとまず “postgres-test” role を作成します。

Enter name of role to add: postgres-test
Shall the new role be a superuser? (y/n) y

createuser に関して詳しく内容を確認したい場合は、man コマンドで確認できます。

man createuser

“q” でマニュアルページから Ubuntu プロンプトに戻れます。

データベースの作成

PostgreSQL はデフォルトでは、ログイン時の Role 名と同じ名前のデータベースがあることを前提に、そのデータベースに接続をしようとします。

なので、Role 名と同じデータベースを作成しておく必要があります。

createdb postgres-test

仮に、前もってデータベースを作成していなかった場合、この様なエラーがでます。

psql: FATAL: database “postgres-test” does not exist

ここで思い出してほしいのですが、PostgreSQL はデフォルトで “Ident” 認証です。

“postgres-test” Role を PostgreSQL に作成しましたが、Ubuntu のユーザーとしてまだ存在しないため、”postgres-test” ユーザーでログインしようとするとエラーがでます。

sudo: unknown user: postgres-test
sudo: unable to initialize policy plugin

なので、Ubuntu 上のユーザーとしても作成する必要があります。

sudo adduser postgres-test

Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

これでやっと、新規に作成した  Role で PostgreSQL にアクセスできるようになりました。。ふぅ。。

新規に作成した Role で PostgreSQL にアクセス

準備はできましたので、あとは下記コマンドを Ubuntu のターミナルに打って PostgreSQL にアクセスできます。

sudo -i -u postgres-test
psql

デフォルトでは、Role 名と同じデータベースに接続しますが、仮に違うデータベースに接続したい場合は、-d [接続したいデータベース名] で接続が可能です。例えば “postgres” でデータベースに接続したい場合は、下記コマンドで可能です。

psql -d postgres

PostgreSQL にアクセスできたら、下記コマンドで接続情報を確認できます。

\conninfo
You are connected to database "postgres" as user "postgres-test" via socket in "/var/run/postgresql" at port "5432".

デフォルト以外のデータベスに接続する際に、確認すると便利ですね。

テーブルの作成

データベースに接続できましたので、テーブルを作成していきましょ。

テーブルは下記のようにして作成することになります。

CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);

テーブル名 (table_name) で名前を指定し、列 (column-name1,2,3…etc) を定義しています。その際、タイプ (col_type) や入力できる長さ (field_length) を定義しています。

例えば、person テーブルで名前と誕生日を管理したい場合、下記のようになります。

CREATE TABLE person (
person_id serial PRIMARY KEY,
name varchar (25) NOT NULL,
birthday date
);

セミコロン (;) を打つまでは何度も改行ができます。

定義した内容は下記コマンドで確認できます。

\dt

  List of relations
Schema | Name | Type | Owner
--------+--------+-------+---------------
public | person | table | postgres-test
(1 row)

テーブルの Owner は、デフォルトでは作成した際のユーザーになります。この場合は、”postgres-test” ですね。

テーブルからデータの追加、検索、削除

それではテーブルができましたので、データを入れていきましょ。

INSERT INTO person (name, birthday) VALUES ('John', '1990-04-20');
INSERT INTO person (name, birthday) VALUES ('Mike', '1995-08-15');

ここで気をつけたいのが、列にはクオート (‘) は必要ないのですが、挿入するデータにはクオート (‘) が必要必要です。

また、person_id は自動で採番されるので入力不要です。

では実際に挿入されたデータを確認しましょ。

SELECT * FROM person;
person_id | name | birthday
-----------+------+------------
1 | John | 1990-04-20
2 | Mike | 1995-08-15
(2 rows)

問題なく挿入されていますね。

では、そのまま削除する方法も確認しておきましょ。削除は下記で可能です。

DELETE FROM person WHERE name = 'John';

実際に削除されているか確認しましょ。

SELECT * FROM person;
person_id | name | birthday
-----------+------+------------
2 | Mike | 1995-08-15
(1 row)

問題なく削除できていますね。

ここで再度データを挿入し、内容を確認します。

INSERT INTO person (name, birthday) VALUES ('Jane', '1997-07-17');
SELECT * FROM person;
person_id | name | birthday
-----------+------+------------
2 | Mike | 1995-08-15
3 | Jane | 1997-07-17
(2 rows)

この結果から、person_id は一度削除された番号を割り振るのではなく、新たな番号を採番していることが確認できます。

テーブルから列の追加、削除

一度作成した列を編集することも簡単にできます。仮に「性別」を新たに追加したい場合、下記コマンドで可能です。

ALTER TABLE person ADD gender varchar(6);
SELECT * FROM person;

では、確認してみましょ。

 person_id | name | birthday | gender
-----------+------+------------+--------
2 | Mike | 1995-08-15 |
3 | Jane | 1997-07-17 |
(2 rows)

想像はつくと思いますが、列の削除は下記コマンドからできます。

ALTER TABLE person DROP birthday;
SELECT * FROM person;
person_id | name | gender
-----------+------+--------
2 | Mike |
3 | Jane |
(2 rows)

問題なく削除できていますね。

データの更新

最後にデータの更新方法を見ていきましょ。

先程新しく追加した “gender” 列に値を入れていきましょ。

UPDATE person SET gender = 'male' WHERE name = 'Mike';
SELECT * FROM person;
person_id | name | gender
-----------+------+--------
3 | Jane |
2 | Mike | male
(2 rows)

問題なく情報が更新されていますね。

まとめ

PostgreSQL はオープンソースで無償で提供されてはいますが、商用でも利用されている大変しっかりとした DBMS です。

本記事では、一般的な利用を紹介しましたが、他にもたくさんの機能があります。

これをきっかけにぜひ一緒に PostgreSQL の世界にはハマりましょ!

 

カテゴリー: ウェブアプリ関連
タグ: postgresql

最初のサイドバー

簡単な自己紹介

ごく普通の 30 代サラリーマンです。世界を旅しながらの生活が目標!!
IT 全般に興味あり: Python (Flask, Django) / PHP (Laravel, Wordpress) / Golang / AWS / Network Security.
Read More…

サイト内検索

最近の投稿

  • 【VS Code プラグイン】Postman より便利!? Rest Client をオススメする理由
  • MySQL と phpMyAdmin を Docker Compose で作って、Python から接続する
  • Windows10 上の Ubuntu から “curl localhost” を実行すると “Connection refused” になる原因
  • リダイレクトの仕組み知ってる?Flask で調べるてみるのだ。
  • Apple 独自の 検索エンジンで何が変わるのか

アーカイブ

  • 2021年3月
  • 2021年1月
  • 2020年10月
  • 2019年3月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年5月
  • 2018年4月

タグ

amazon cloudfront amazon s3 aws coursera css django docker flask fullstack gcp github hawaii life in USA linux mongodb mysql postgresql pwa python sqlite vagrant

Contact
Privacy Policy and Term of Use
Copyright © 2025 · All rights reserved.