PostgreSQLはじめの一歩

最近になってデータベース関係のこと全然わからんなと思う事が増えました。今担当している業務だと直接は関係ないんですけど、やっぱり知っておくべき常識みたいなものはあるし、自分で何か作ってみたいってなっても必要になる事多いと思うんですよね。ということで、PostgreSQLを取り敢えず勉強しようと思い立ったわけです。

構築

直接PCにインストールすると、色々と設定をいじくりまわすのに抵抗が出てきてしまいます。なので、ここはDockerを使いたいと思います。

とりあえず公式リポジトリからプルします。

docker pull postgres

起動。パスワードを設定します。

docker run --name some-postgres -e POSTGRES_PASSWORD=pass -d postgres

Postgres には psql というコンソールクライアントツールがあるみたいです。ので、それを使って起動しているPostgresに接続します。

docker run -it --rm --link some-postgres:postgres postgres psql -h postgres -U postgres

接続すると、先ほど設定したパスワードの入力を求められるので入力。

Password for user postgres:
psql (10.4 (Debian 10.4-2.pgdg90+1))
Type "help" for help.

postgres=#

無事接続できました。

基本操作

取り敢えず、ユーザ、データベース、テーブルを作成してレコードを挿入して見ましょう。

まずはユーザーとデータベースの作成。ユーザーと同じ名前のデータベースを作成する必要があります。詳しくは⇨ロールの属性

CREATE USER bookstore PASSWORD 'pass';
CREATE DATABASE bookstore;

ユーザーが作成されたので、再ログインします。

docker run -it --rm --link some-postures:postgres postgres psql -h postgres -U bookstore

最も単純でつまらないテーブルを作成して見ましょう。

CREATE TABLE products (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL
);

この時点でテーブルの一覧を確認すると、先ほどの productsテーブルが出てきます。

bookstore=> \dt
           List of relations
 Schema |   Name   | Type  |   Owner
--------+----------+-------+-----------
 public | products | table | bookstore
(1 row)

テーブルの構造を見ることもできます。

bookstore=> \d products
                     Table "public.products"
 Column |         Type          | Collation | Nullable | Default
--------+-----------------------+-----------+----------+---------
 id     | integer               |           | not null |
 name   | character varying(50) |           | not null |
Indexes:
    "products_pkey" PRIMARY KEY, btree (id)

レコードを追加しましょう。

bookstore=> INSERT INTO products VALUES (0, 'ipad');
INSERT 0 1
bookstore=> INSERT INTO products VALUES (1, 'windows tablet');
INSERT 0 1
bookstore=> SELECT * FROM products;
 id |      name
----+----------------
  0 | ipad
  1 | windows tablet
(2 rows)

感想

docker を使ったのでかなり簡単に構築できました。そして何より、公式のリファレンスが読みやすいです。

PostgreSQL 10.4文書

次はSpring DataからPostgreSQLに接続してごちゃごちゃやりたいと思います。