「7つのデータベース 7つの世界」第2章の学習のために、PostgreSQLをインストールします。
7つのデータベース 7つの世界
- PotgreSQL
- Riak
- HBase
- MongoDB
- CouchDB
- Neo4j
- Redis
Mac OS X
homebrewでインストールします。バージョンは、12.2でした。
$ brew install postgresql
$ psql --version
psql (PostgreSQL) 12.2
$ which psql
/usr/local/bin/psql
$ which pg_config
/usr/local/bin/pg_config
Code language: Bash (bash)
contribとpg_configは別にインストールしなくてもいいの?
postgresql本体をインストールするだけで、contribパッケージ、pg_configコマンドもインストールされました。
書籍のPostgresのバージョンは?
原著は2012/5発行です。PostgreSQLリリースノートを見ると、9.1.xか、9.0.xだと思います。
データベースの一覧を表示しようとすると、まだサーバが起動していませんでした。
$ psql -l
psql: error: could not connect to server: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Code language: Bash (bash)
サーバーを起動します。最後に"&"をつけます。
$ postgres -D /usr/local/var/postgres &
2020-04-18 18:20:45.692 JST [92653] LOG: starting PostgreSQL 12.2 on x86_64-apple-darwin19.3.0, compiled by Apple clang version 11.0.0 (clang-1100.0.33.17), 64-bit
2020-04-18 18:20:45.694 JST [92653] LOG: listening on IPv6 address "::1", port 5432
2020-04-18 18:20:45.694 JST [92653] LOG: listening on IPv4 address "127.0.0.1", port 5432
2020-04-18 18:20:45.695 JST [92653] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2020-04-18 18:20:45.711 JST [92654] LOG: database system was shut down at 2020-04-18 17:55:56 JST
2020-04-18 18:20:45.714 JST [92653] LOG: database system is ready to accept connections
Code language: Bash (bash)
サーバーを終了するときは、jobsコマンドとkillコマンドを使います。
$ jobs
[1]+ Running postgres -D /usr/local/var/postgres &
$ kill %1
2020-04-23 06:14:18.742 JST [27929] LOG: received smart shutdown request
2020-04-23 06:14:18.746 JST [27929] LOG: background worker "logical replication launcher" (PID 27940) exited with exit code 1
2020-04-23 06:14:18.746 JST [27935] LOG: shutting down
2020-04-23 06:14:18.756 JST [27929] LOG: database system is shut down
[1]+ Done postgres -D /usr/local/var/postgres
Code language: Bash (bash)
データベース一覧を表示します。
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+---------+-------+---------------------------------
postgres | aoki.makoto | UTF8 | C | C |
template0 | aoki.makoto | UTF8 | C | C | =c/"aoki.makoto" +
| | | | | "aoki.makoto"=CTc/"aoki.makoto"
template1 | aoki.makoto | UTF8 | C | C | =c/"aoki.makoto" +
| | | | | "aoki.makoto"=CTc/"aoki.makoto"
(3 rows)
Code language: PHP (php)
bookデータベースを作成します。
$ createdb book
Code language: Bash (bash)
サーバーが起動していないときは、次のエラーが表示されます。サーバーを起動してから、createdbコマンドを実行してください。
$ createdb book
createdb: error: could not connect to database template1: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Code language: Bash (bash)
psqlシェルに入ります。
$ psql (12.2)
Type "help" for help.
book=#
Code language: Bash (bash)
psqlシェルを抜けるには、\q と入力します。
book=# \q
$
Code language: Bash (bash)
bookデータベースにcontribパッケージのtablefunc、dict_xsyn、fuzzystrmatch、pg_trgm、cubeを適用します。
book=# CREATE EXTENSION tablefunc;
CREATE EXTENSION
book=# CREATE EXTENSION dict_xsyn;
CREATE EXTENSION
book=# CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION
book=# CREATE EXTENSION pg_trgm;
CREATE EXTENSION
book=# CREATE EXTENSION cube;
CREATE EXTENSION
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
第2章の3日めで必要ね
参考までに、contribパッケージは、/usr/local/share/postgresql/extension/ にありました。
$ pg_config --sharedir
/usr/local/share/postgresql
$ ls /usr/local/share/postgresql
errcodes.txt pg_service.conf.sample psqlrc.sample timezonesets
extension postgres.bki snowball_create.sql tsearch_data
information_schema.sql postgres.description sql_features.txt
pg_hba.conf.sample postgres.shdescription system_views.sql
pg_ident.conf.sample postgresql.conf.sample timezone
Ubuntu 18.04
aptでインストールします。バージョンは10.12です。
contribパッケージを使えるようにするために、postgresql-contribをインストールします。pg_configコマンドも使えるようにするために、libpq-devもインストールします。
$ sudo apt install postgresql
$ sudo apt install postgresql-contrib
$ sudo apt install libpq-dev
Code language: Bash (bash)
$ psql --version
psql (PostgreSQL) 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)
$ which psql
/usr/bin/psql
$ which pg_config
/usr/bin/pg_config
Code language: Bash (bash)
書籍のPostgresのバージョンは?
原著は2012/5発行です。PostgreSQLリリースノートを見ると、9.1.xか、9.0.xだと思います。
データベース一覧を表示してみます。すでにサーバーは起動していましたが、次のエラーが表示されました。
$ psql -l
psql: FATAL: role "aoki" does not exist
Code language: Bash (bash)
postgresユーザとして、サーバーに接続するために、sudo -u postgres をつけて、psql -l コマンドを実行します。
$ sudo -u postgres psql -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)
Code language: PHP (php)
bookデータベースを作成します。sudo -u postgresをつけて、createdbコマンドを実行します。
$ sudo -u postgres createdb book
Code language: Bash (bash)
psqlシェルに入ります。
$ sudo -u postgres psql
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1))
Type "help" for help.
book=#
Code language: Bash (bash)
psqlシェルを抜けるには、\q と入力します。
book=# \q
$
Code language: Bash (bash)
bookデータベースにcontribパッケージのtablefunc、dict_xsyn、fuzzystrmatch、pg_trgm、cubeを適用します。
book=# CREATE EXTENSION tablefunc;
CREATE EXTENSION
book=# CREATE EXTENSION dict_xsyn;
CREATE EXTENSION
book=# CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION
book=# CREATE EXTENSION pg_trgm;
CREATE EXTENSION
book=# CREATE EXTENSION cube;
CREATE EXTENSION
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
第2章の3日めで必要ね
参考までに、contribパッケージは、/usr/share/postgresql/10/extension/ にありました。
$ pg_config --sharedir
/usr/share/postgresql/10
$ ls /usr/share/postgresql/10
catalog_version man postgres.description snowball_create.sql
contrib pg_hba.conf.sample postgres.shdescription sql_features.txt
conversion_create.sql pg_ident.conf.sample postgresql.conf.sample system_views.sql
extension pg_service.conf.sample psqlrc.sample timezonesets
information_schema.sql postgres.bki recovery.conf.sample tsearch_data
その他
外部にsqlファイルを用意しておいて、\i で外部ファイルを読み込んで、実行することができます。
create_table_countries.sql
CREATE TABLE countries (
country_code char(2) PRIMARY KEY,
country_name text UNIQUE
);
Code language: SQL (Structured Query Language) (sql)
book=# \i create_table_countries.sql
CREATE TALBE
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
残念ながら、直接ビューから更新することはできない。
p30
version 10では、CREATE RULEすることなく、ビューをUPDATEできました。