PostgreSQLをインストールするには

「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_configCode language: Bash (bash)

contribとpg_configは別にインストールしなくてもいいの?

postgresql本体をインストールするだけで、contribパッケージ、pg_configコマンドもインストールされました。

書籍のPostgresのバージョンは?

PostgreSQL: Release Notes

原著は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 bookCode 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 EXTENSIONCode 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-devCode 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_configCode language: Bash (bash)

書籍のPostgresのバージョンは?

PostgreSQL: Release Notes

原著は2012/5発行です。PostgreSQLリリースノートを見ると、9.1.xか、9.0.xだと思います。

データベース一覧を表示してみます。すでにサーバーは起動していましたが、次のエラーが表示されました。

$ psql -l
psql: FATAL:  role "aoki" does not existCode 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 bookCode 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 EXTENSIONCode 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 TALBECode language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

残念ながら、直接ビューから更新することはできない。

p30

version 10では、CREATE RULEすることなく、ビューをUPDATEできました。

タイトルとURLをコピーしました