【Ubuntu18】PostgreSQLをインストール~テーブル作成までの手順を超詳しく解説

table

PostgreSQLをUbuntu18.04にインストール~テーブル作成
までの手順を超詳しく解説する。

このページは以下の公式サイトに沿ったやり方でインストール作業を行います。
https://wiki.postgresql.org/wiki/Apt

この記事を読んでも分からないところがあったり、
記事の内容に誤りを見つけた方はコメントにてお知らせくださいませ。

それでは、実際に進めていこう。

実行環境

OS: Ubuntu 18.04.2 LTS
python: 3.6.8

インストール手順

インストール手順をこれから説明していく。

鍵の入手

インストールしようとしているPostgreSQLが本物か確認できる様にリポジトリキーを使う。
これをしないと不正に改ざんされたPostgreSQL的なものをインストールしてしまうかもしれない。

以下の手順で鍵を入手し、登録する。

# 鍵のインストール、PostgreSQL利用に必要なパッケージをインストール。
$ sudo apt install curl ca-certificates gnupg
# 鍵を取得し、その鍵を登録する
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

PostgreSQLの公式リポジトリを登録

“sudo apt ~”でubuntuで使うパッケージを管理出来る。
この手順ではPostgreSQLの公式が配布してくれているリポジトリをaptで管理できる様にする。

# "/etc/apt/sources.list.d/pgdg.list"ファイルを作成。
# このファイルには利用するリポジトリの場所だったり、種類だったりの詳細を記載し、aptで管理できるようにする。
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

PostgreSQLのインストール

# パッケージの参照先情報を最新にする(これをしないと最新ではないパッケージをインストールしてしまうことがある)
$ sudo apt update
# PostgreSQLをインストールする
$ sudo apt install postgresql

これでインストール作業は完了。

PostgreSQLにログイン

ここからはログイン手順について解説する。

起動

インストールしただけではPostgreSQLがdown状態なので起動させる。

$ /etc/init.d/postgresql start
[ ok ] Starting postgresql (via systemctl): postgresql.service.

/etc/init.d/postgresqlはPostgreSQLのインストールと同時に作成される。
startを指定した時は起動。stopにした時は停止。statusとすると起動状態が分かる。

ログイン

インストール直後、PostgreSQLにログインできるユーザーは
インストールと同時に作成されるユーザーpostgresさんのみである。
(OSのユーザーとしてのpostgresさんとPostgreSQLのユーザーとしてのpostgresさんの2人ができる。)

PostgreSQLにログインするためpostgresになる。

# postgresユーザーには初期パスワードが設定されていないので設定
$ sudo passwd postgres
# ユーザー変更
$ su - postgres
# 現在のOSユーザー名と同じ名称のPostgreSQLユーザーでPostgreSQLにログインする
$ psql

以下のコマンドを使えば、任意のユーザーでPostgreSQLにログインすることが可能。

$ psql -U username

以下の様な表示が出力されればログイン成功。

$ psql
psql (11.4 (Ubuntu 11.4-1.pgdg18.04+1))
Type "help" for help.
postgres=# 

DB作成

PostgreSQL内で下記のコマンドを使ってDBを作成する。

# database_nameという名前のDBを作成する。所有者はpostgresに設定
postgres=# CREATE DATABASE database_name OWNER postgres;
CREATE DATABASE

「 \l 」 コマンドでDBが作成されているか確認する。

postgres=# \l                                    List of databases
     Name      |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
---------------+----------+----------+-------------+-------------+-----------------------
 database_name | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres      | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
 template1     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
(4 rows)

一番上に追加したdababase_nameと言う名のDBが作成されていることが分かる。

では作成したDBに入る。

# \c DB名 で任意のDBに入ることが出来る
postgres=# \c database_name
You are now connected to database "database_name" as user "postgres".
database_name=#

テーブル作成

以下の様なbookテーブルを作成しようと思う。

IDnameauthor
1我輩は犬であった冬目漱岩
2人間合格太宰傷

作成コマンド

# integer型のid,varchar(10)型(10文字までの文字列)のname,varchar(10)型のauthorカラム(列)をもったbookと言う名のテーブルを作成する
database_name=# CREATE TABLE book (id integer, name varchar(10), author varchar(10));
CREATE TABLE
# 作成されているテーブルを確認
database_name=# \dt
        List of relations
 Schema | Name  | Type  |  Owner
--------+-------+-------+----------
 public | book  | table | postgres
(1 row)
# bookテーブルの中身を確認
database_name=# SELECT * FROM book;
 id | name | author
----+------+--------
(0 rows)

値が格納されていないbookテーブルが出来上がった!

値の格納

# bookテーブルに行を追加
# ()で囲まれているのが一つの行に当たる
database_name=# INSERT INTO book VALUES (1, '我輩は犬であった', '冬目漱岩'), (2, '人間合格', '太宰傷');
INSERT 0 2
# 格納後のテーブル内容確認
database_name=# SELECT * FROM book;
 id |       name       |  author
----+------------------+----------
  1 | 我輩は犬であった   | 冬目漱岩
  2 | 人間合格      | 太宰傷
(2 rows)
database_name=#

追加された!
これで作りたかったテーブル完成!

IDnameauthor
1我輩は犬であった冬目漱岩
2人間合格太宰傷

参考にしたサイト