Mac に MacPorts で PostgreSQL をインストールする。

下記サイトの焼き増しになります。
基本的には、下記サイトを見たほうが良いと思います。
MacPortsでPostgreSQLをセットアップするメモ - 平常運転
 

インストール

postgresql を探す。

$ port search sql | grep ^postgresql
...
postgresql93 @9.3.4 (databases)
postgresql93-doc @9.3.4 (databases)
postgresql93-server @9.3.4 (databases)
postgresql94 @9.4beta1 (databases)
postgresql94-doc @9.4beta1 (databases)
postgresql94-server @9.4beta1 (databases)
...

 

9.4 は beta か(´・ω・`)
9.3 君に決めた(`・ω・´)m9

$ sudo port install postgresql93
Password:
--->  Computing dependencies for postgresql93
--->  Dependencies to be installed: libxslt ossp-uuid postgresql_select readline
--->  Fetching archive for libxslt
...
# ↓server もインストールしてね(ゝω・)vキャピ と言ってます。
To use the postgresql server, install the postgresql93-server port 
--->  Activating postgresql93 @9.3.4_0
--->  Cleaning postgresql93
--->  Updating database of binaries
--->  Scanning binaries for linking errors
--->  No broken files found.

 

サーバインストールします。

$ sudo port install postgresql93-server
...
# ↓ これもしてね(ゝω・)vキャピ と言ってます。
To create a database instance, after install do  
 sudo mkdir -p /opt/local/var/db/postgresql93/defaultdb
 sudo chown postgres:postgres /opt/local/var/db/postgresql93/defaultdb
 sudo su postgres -c '/opt/local/lib/postgresql93/bin/initdb -D /opt/local/var/db/postgresql93/defaultdb' 

 

ちなみに

$ which psql
$ # 無反応(パスが通っていないから) 

 

さてはて...

焦って$PATHに/opt/local/lib/postgresql93/bin/を追加するのは良くない。
MacPortsでは、このテの hogeXXってバージョン分かれてるportは、大概
port select hoge hogeXX して特定のバージョンを選ばないとパスが通らない。
たとえばrubyとかmysqlとかpythonとかもそんな感じ。

MacPortsでPostgreSQLをセットアップするメモ(引用もとのページ)

なるほど、勉強になります(`・ω・´)
  

そこでワイ氏も postgresql と postgresql93 を対応付けます。Python をいれたときも、やったなぁ(遠い目)。

$ # ① 一覧を表示させて、
$ port select --list postgresql
Available versions for postgresql:
	none (active)
	postgresql93
$ 
$ # ② select します。
$ sudo port select --set postgresql postgresql93
Selecting 'postgresql93' for 'postgresql' succeeded. 'postgresql93' is now active.

 

ちなみに
postgresql に set したけど psql にリンク付けされる。

$ which psql
/opt/local/bin/psql
$ which postgresql
$ # 無反応(´・ω・`)

 

デフォルトのデータベースを設定します。sudo port install postgresql93-server を実行したときに、書かれていた3つのコマンドです。

$ sudo mkdir -p /opt/local/var/db/postgresql93/defaultdb
$ sudo chown postgres:postgres /opt/local/var/db/postgresql93/defaultdb
$ sudo su postgres -c '/opt/local/lib/postgresql93/bin/initdb -D /opt/local/var/db/postgresql93/defaultdb'
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
...
Success. You can now start the database server using:

    /opt/local/lib/postgresql93/bin/postgres -D /opt/local/var/db/postgresql93/defaultdb
or
    /opt/local/lib/postgresql93/bin/pg_ctl -D /opt/local/var/db/postgresql93/defaultdb -l logfile start

 

(ここから追記)

サーバ起動、接続方法

方法① psql が提示した方法 1 で失敗

  1. sudo では実行できません!
  2. sudo 無しでも実行権限ありません!

みたいなエラー(´;ω;`)ブワッ

$ /opt/local/lib/postgresql93/bin/postgres -D /opt/local/var/db/postgresql93/defaultdb
postgres cannot access the server configuration file "/opt/local/var/db/postgresql93/defaultdb/postgresql.conf": Permission denied
$
$
$ sudo /opt/local/lib/postgresql93/bin/postgres -D /opt/local/var/db/postgresql93/defaultdb
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise.  See the documentation for
more information on how to properly start the server.

 

方法② psql が提示した方法 2 でも失敗

  1. sudo では実行できません!
  2. sudo 無しでも実行権限ありません!

ここでも、そんなエラー(´;ω;`)ブワッ

$ /opt/local/lib/postgresql93/bin/postgres -D /opt/local/var/db/postgresql93/defaultdb
postgres cannot access the server configuration file "/opt/local/var/db/postgresql93/defaultdb/postgresql.conf": Permission denied
$ 
$ 
$ sudo /opt/local/lib/postgresql93/bin/postgres -D /opt/local/var/db/postgresql93/defaultdb
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise.  See the documentation for
more information on how to properly start the server.

 

方法③ 参照先のブログが提示している方法でも失敗。

え?

$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql93-server.plist
org.macports.postgresql93-server: Already loaded
$ sudo launchctl start org.macports.postgresql93-server
$ sudo psql -U postgres
psql: 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"?

  

方法④ 参照先のブログが提示している方法で再起動するとはいれた。

$ sudo launchctl stop org.macports.postgresql93-server
$ sudo launchctl start org.macports.postgresql93-server
$ psql -U postgres
psql (9.3.4)
Type "help" for help.
postgres=# \q

(ここまで追記)
 



ちょっとしたテーブルの追加など

チュートリアルに書かれてる内容のテーブルを作る(´・ω・`)
ログイン

$ psql -U postgres
psql (9.3.4)
Type "help" for help.

 


データベース作成

postgres=# create database mydatabase;
CREATE DATABASE

 

データベース一覧表示

postgres=# \l
                             List of databases
    Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
------------+----------+----------+---------+-------+-----------------------
 mydatabase | postgres | UTF8     | C       | UTF-8 | 
 postgres   | postgres | UTF8     | C       | UTF-8 | 
...

 

ユーザ一覧表示

postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}

 

パスワード変更

postgres=# alter role postgres with password 'postgres';
ALTER ROLE

 

ユーザ作成

postgres=# create user mydatabaseuser;
CREATE ROLE

 

新しく作ったテーブルのオーナーを変更。
PostgreSQLにてデータベースの所有者を変更するには

postgres=# select usesysid from pg_user where usename = 'mydatabaseuser';
 usesysid 
----------
    16385
(1 row)

postgres=# update pg_database set datdba = 16385 where datname = 'mydatabase';
UPDATE 1
postgres=# alter role mydatabaseuser with password 'mypassowrd';
ALTER ROLE

 

詰まったところ

DROP DATABASE: cannot be executed on the currently open database

 

下記の内容に沿っても、同じ症状。

削除しようとするデータベースに接続はできません。代わりに、template1 や他のデータベースに接続してからこのコマンドを再実行して下さい。

 

PC再起動するも同じ症状

 

別ユーザ postgres にてログイン、実行すると成功した。