PostgreSQLのインストール
序
前回まではVirtualBox上のUbuntu18.04にsshサーバーをインストールして、Windowsからsshで繋げられるところまで実施しました。
今回はUbuntu18.04にHerokuでよく使用されるPostgreSQLをインストールして、SQLなDatabaseを使えるようにします。
インストールの前に
Dockerじゃダメなの?
最近の環境構築では、こういうケースで、便利なのでDockerを使うことも多いです。ただし、それはUbuntuやLinuxに慣れてれば、の話なので、今回はまずは基本のローカルインストールを実施します。
Databaseとはどんなもの?
みんなが使用する大規模データを入れておくサーバーです。ファイルサーバーよりもより細かく、大量のデータを検索したり集計したりできます。検索したり集計したりするのに、データの持ち方や、検索・集計に使用するI/Fや言語などの区別により、いろいろな種類のデータベースがあります。
今回インストールするPostgreSQLは古式ゆかしいSQLを使用するRDBMSという分類のデータベースです。Excelのお化けみたいなタイプで、OracleやMySQLなどと同様古くからある、最もオーソドックスなタイプのデータベースになります。
インストール
$ sudo apt install postgresql
いつもどおり、パスワードを入力して、容量確認して"y"でOKです。2020年2月4日現在PostgreSQLの最新バージョンは12ですが、ここでインストールされるバージョンは10になります。これはUbuntu18.04が約2年前のOSであることが原因です。最新バージョンを入れる方法もありますが、そこまで凝ったこともしないので、今回はバージョン10のまま使います。
初期設定など
素のPostgreSQLはpostgresという管理ユーザーが一人だけいるパスワード設定のない管理用のデータしか入っていないデータベースになっています。
管理ユーザーで接続
まずはsudoで PostgreSQLの管理ユーザー postgres になります。
user@ubuntu1804:~$ sudo -i -u postgres bash --login
[sudo] user のパスワード:
postgres@ubuntu1804:~$
PostgreSQLに接続します。ここではPostgreSQLサーバーに同梱されているpsqlコマンドを使います。
postgres@ubuntu1804:~$ psql
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.
postgres=#
この状態でPostgreSQLに接続しています。例えば現在操作しようとしているデータベースの状態を調べるには…
postgres-# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
postgres-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
postgres-#
psqlコマンドの内部コマンドである、\coninfoで、現在接続しているデータベースを調べています。"postgres"という名前のデータベースに接続しています。ややこしいのですが、PostgreSQLに限らずデーターベースサーバー内には通常複数のデータベースが格納されていて、それぞれに名前がついています。この"postgres"という名前のデータベースは、管理用のデータが入っているデータベースです。
その次に実行している\l内部コマンドが、現在接続しているPostgreSQLサーバー内のデータベース一覧です。全て管理用のデータベースなので、普通のデータは格納しませんし、これらのデータベースは基本的に直接いじりません。
管理ユーザーのパスワード設定
まずはpostgresユーザーのパスワードを設定します。 (パスワード)部分にはご自分の覚えやすいパスワードを設定してください。
postgres-# alter user postgres with password '(パスワード)'
postgres-#
一般ユーザーとデータベース作成
このままPostgreSQL内のユーザー追加と、データベース追加を行います。
(ユーザー)(パスワード)(ユーザーデータベース名)には自分で名前を入れてください(ユーザー名はUbuntuのユーザー名と一致させてください)。ここではそれぞれuser, password, userdbで実施しています。
postgres=# create user "(ユーザー)" password '(パスワード)';
CREATE ROLE
postgres=# create database "(ユーザーデータベース名)" owner "(ユーザー)";
CREATE DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
userdb | user | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
(4 rows)
postgres=#
psqlの内部コマンド\lで新しいデータベースuserdbが所有者userで作成されているのが分かります。
※なお、今回設定されたパスワード、実は使用しません。ローカル接続のpeer認証を使っているからなのですが、ネットワーク経由で接続する場合に初めて必要になるのですが、今回はネットワーク経由で使用しないということです(SSLクライアント認証などを使用する場合はネットワーク経由でも使いませんけども…)。
これで一旦管理ユーザーでの作業が終わるので、抜けます。psqlからは\qで、sudo bashからはexitで抜けます。
postgres=# \q
postgres@ubuntu1804:~$ exit
ログアウト
user@ubuntu1804:~$
一般ユーザーで接続
改めてpsqlコマンドで繋ぎ直します。(ユーザーデータベース名)(ユーザー)には先程作成したものを使用してください。ここではそれぞれuserdb, userとしています。
user@ubuntu1804:~$ psql -d (ユーザーデータベース名) -U (ユーザー)
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.
userdb=>
テーブル作成とデータ追加
何もしないのも寂しいのでサンプル程度のデータを作成します。以下を貼り付けて実行してください。create tableでExcel表のようなテーブルを作成し、insertでデータをテーブルに挿入しています。英語圏の人なら何をしているかこれだけで分かるような文法です。
create table example_table (item_id varchar(14) primary key, item_name varchar(100), kakaku numeric(10,0));
insert into example_table values('4514603365511','アサヒ 十六茶 PET500ml',124);
insert into example_table values('4514603343519','アサヒ 十六茶 (LL)紙パックスリム250ml',80);
insert into example_table values('4514603377019','アサヒ 十六茶 PET2L',350);
insert into example_table values('4514603240719','アサヒ 十六茶 PET275ml',115);
insert into example_table values('4514603377217','アサヒ 十六茶 PET630ml',140);
insert into example_table values('4514603240818','アサヒ 十六茶 ボトル缶275g',115);
insert into example_table values('4514603241112','アサヒ 十六茶 缶245g',86);
insert into example_table values('4514603386110','アサヒ 十六茶ほうじ茶 PET630ml',140);
commit;
実行するとexample_tableが作成されて、中にアサヒ飲料様の尊いお茶のデータが数件作成されます。元データは↓のホームページからお借りしました。
では作成したテーブルのデータをselectで見てみましょう。
userdb=> select * from example_table;
item_id | item_name | kakaku
---------------+---------------------------------------+--------
4514603365511 | アサヒ 十六茶 PET500ml | 124
4514603343519 | アサヒ 十六茶 (LL)紙パックスリム250ml | 80
4514603377019 | アサヒ 十六茶 PET2L | 350
4514603240719 | アサヒ 十六茶 PET275ml | 115
4514603377217 | アサヒ 十六茶 PET630ml | 140
4514603240818 | アサヒ 十六茶 ボトル缶275g | 115
4514603241112 | アサヒ 十六茶 缶245g | 86
4514603386110 | アサヒ 十六茶ほうじ茶 PET630ml | 140
(8 rows)
userdb=>
それっぽいデータが表示されました。十六茶、皆さんも大好きですよね。
まとめ
WindowsのVirtualBox上にインストールしたUbuntu18.04にPostgreSQLをインストールし、簡単なテーブルを作成、表示してみました。
次回はもう一発PostgreSQLをやります。ホスト側から、DBeaverというSQLエディタを使って操作してみます。
ディスカッション
コメント一覧
まだ、コメントがありません