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_config

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"?

サーバーを起動します。最後に"&"をつけます。

$ 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

サーバーを終了するときは、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

データベース一覧を表示します。

$ 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)

bookデータベースを作成します。

$ createdb book

サーバーが起動していないときは、次のエラーが表示されます。サーバーを起動してから、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"?

psqlシェルに入ります。

$ psql (12.2) Type "help" for help. book=#

psqlシェルを抜けるには、\q と入力します。

book=# \q $

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

第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
$ 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

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

PostgreSQL: Release Notes

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

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

$ psql -l psql: FATAL: role "aoki" does not exist

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)

bookデータベースを作成します。sudo -u postgresをつけて、createdbコマンドを実行します。

$ sudo -u postgres createdb book

psqlシェルに入ります。

$ sudo -u postgres psql psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) Type "help" for help. book=#

psqlシェルを抜けるには、\q と入力します。

book=# \q $

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

第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 );
book=# \i create_table_countries.sql CREATE TALBE

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

p30

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

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