🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

2386閲覧

postgresqlの「postgres」コマンドが実行できません、、、

msy7822

総合スコア17

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

1クリップ

投稿2020/12/27 13:22

編集2020/12/27 13:42

概要

現在、DBMSにpostgresqlを採用して下記の手順でアプリ開発の環境を構築しております

postgresql version 13.1

① brew install postgresql ② ~/.zshに「export PGDATA='/usr/local/var/postgres'」というパスを通す ③ 想定どおりに行けば、ここで「postgres」コマンドを実行するとpostgresサーバーに接続される

しかし③で「postgres」コマンドを打つと、実際には下記のようなログが出力されます。

2020-12-27 22:15:37.369 JST [19406] LOG: starting PostgreSQL 13.1 on x86_64-apple-darwin19.6.0, compiled by Apple clang version 12.0.0 (clang-1200.0.32.27), 64-bit 2020-12-27 22:15:37.371 JST [19406] LOG: listening on IPv6 address "::1", port 5432 2020-12-27 22:15:37.371 JST [19406] LOG: listening on IPv4 address "127.0.0.1", port 5432 2020-12-27 22:15:37.390 JST [19406] FATAL: could not create lock file "/tmp/.s.PGSQL.5432.lock": Permission denied 2020-12-27 22:15:37.392 JST [19406] LOG: database system is shut down

おそらく上記のログの4行目で「permisshon denied」となっているので権限というキーワードから検索していろいろ試しましたが、この

"/tmp/.s.PGSQL.5432.lock"

というlockファイルを作成することができませんでした。

自分はまだまだ知識量が乏しいので、もしかしたらそもそもの「手順」が間違ってるかもしれません。

ですので、その辺りも含めてどなたかお詳しい方がおられましたら、お力添えをいただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

technocore

2020/12/27 14:07

Homebrew postgresql で検索しましょう。 あなたの作業は間違いだらけです。
msy7822

2020/12/27 14:15

アドバイスありがとうございます。 しかしながら、そのキーワードで検索しても自分が過去に見たようなQiitaの記事が出てくるばかりですので、具体的どのあたりがおかしいかご指摘いただけますか?
m.ts10806

2020/12/27 18:57

>想定どおりに行けば 何をもとに立てた想定なのでしょうか
guest

回答2

0

ベストアンサー

brew install postgresql した時に以下のメッセージが表示されたと思います。

==> postgresql To migrate existing data from a previous major version of PostgreSQL run: brew postgresql-upgrade-database This formula has created a default database cluster with: initdb --locale=C -E UTF-8 /usr/local/var/postgres For more details, read: https://www.postgresql.org/docs/13/app-initdb.html To have launchd start postgresql now and restart at login: brew services start postgresql Or, if you don't want/need a background service you can just run: pg_ctl -D /usr/local/var/postgres start

まず、最初の段落は PostgreSQL 12 以前で作ったデータベースを新バージョン (13.x) で使うには以下のコマンドを実行するればいいということなので、PostgreSQL 12 以前を使ってなければ無視して大丈夫です。

次の段落の initdb は PostgreSQL のデータベースを初期化するコマンドですが、brew install postgresql の際に自動的にデータベースは作成済みなので、これも無視して大丈夫です。(データベースがおかしくなって初期化したくなったらこのコマンドを思い出せばいいでしょう。)

最後の段落が肝心の PostgreSQL サーバーの起動方法ですが、2 通りあります。

  • brew services start postgresql は Homebrew が提供するサービス管理機能を使って自動的に起動するように設定する方法で、このコマンドは 1 回だけ実行すれば、次回以降 macOS を再起動した際には自動的に PostgreSQL サーバーが起動するようになります。
  • pg_ctl -D /usr/local/var/postgres start は上記のサービス管理機能を使わずに手動で PostgreSQL サーバーを起動する方法で、macOS を再起動した場合には毎回実行する必要があります。

なお、brew services ですが、brew services (または brew services list) というコマンドで現在動いているサービスを確認できます。また、サービスを停止したい場合は brew services stop postgresql とします。

$ brew services start postgresql ==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql) $ brew services list Name Status User Plist postgresql started hoshi /Users/hoshi/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

※ なお、export PGDATA='/usr/local/var/postgres' は不要だと思います…。


ところで、「サービス」とは何かご存知でしょうか。「サーバー」や「デーモン」と言ったりもしますが、これは直接ユーザーと対話するプログラムではなく、バックグラウンドで常に待機していて、何かあれば処理をしてくれるものです。

上に PostgreSQL サーバーの起動方法を書きましたが、これらのコマンド実行しても、すぐにシェルに戻ってきてしまい、データベースに接続はしません。PostgreSQL データベースに接続するには psql という別のコマンド (サーバーに接続するためのコマンドなので、クライアントと言ったりもします。) があって、これを使う必要があります。

まず、psql -l というコマンドを実行してみましょう。
(なお、$ はシェルのプロンプトを表すことにしますので、入力しなくて構いません。)

$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-------+----------+---------+-------+------------------- postgres | hoshi | UTF8 | C | C | template0 | hoshi | UTF8 | C | C | =c/hoshi + | | | | | hoshi=CTc/hoshi template1 | hoshi | UTF8 | C | C | =c/hoshi + | | | | | hoshi=CTc/hoshi (3 rows)

psql -l は PostgreSQL が管理するデータベースを一覧表示するもので、インストール直後は postgres, template0, template1 という 3 つのデータベースが自動的に作られています。この 3 つのデータベースは PostgreSQL そのものの管理用 (ユーザーやデータベースの一覧が見れたりします) なので、普通はいじる必要はないと思います。

なお、これらの管理用データベースの所有者は、普通に UNIX などで PostgreSQL を扱う場合には postgres という PostgreSQL 管理者ユーザーが所有者になっていることが一般的ですが、Homebrew でインストールした PostgreSQL では一般ユーザーがそのまま PostgreSQL 管理者ユーザーを兼用する設定になってますので、ご注意ください。

一般的な PostgreSQL のインストール手順では、ここで PostgreSQL 管理者ユーザーとは別に PostgreSQL 操作用のユーザーを作ることになりますが、Homebrew ではすでに自分の macOS アカウントと同じ名前の PostgreSQL ユーザーが作られてますので、その手順は不要になります。また、一般的には PostgreSQL にアクセスするためのパスワードを設定することが推奨されてますが、Homebrew ではパスワードも設定しないことも少なくないのでは…。


実際にデータベースを扱う場合は、まず createdb コマンドでデータベースを作る必要があります。
例えば、testdb というデータベースを作るには、次のようにします。

$ createdb testdb $ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-------+----------+---------+-------+------------------- postgres | hoshi | UTF8 | C | C | template0 | hoshi | UTF8 | C | C | =c/hoshi + | | | | | hoshi=CTc/hoshi template1 | hoshi | UTF8 | C | C | =c/hoshi + | | | | | hoshi=CTc/hoshi testdb | hoshi | UTF8 | C | C | (4 rows)

作ったデータベースに接続するには、psql コマンドを使います。
test という名前のテーブルを作って、データを入れて、表示してみます。

$ psql testdb psql (13.1) Type "help" for help. testdb=# \d Did not find any relations. testdb=# CREATE TABLE test (id INT, name TEXT); CREATE TABLE testdb=# \d List of relations Schema | Name | Type | Owner --------+------+-------+------- public | test | table | hoshi (1 row) testdb=# INSERT INTO test VALUES (1, 'abc'); INSERT 0 1 testdb=# SELECT * FROM test; id | name ----+------ 1 | abc (1 row) testdb=# \q

データベース名=# というのが psql のプロンプトで、\d でテーブル一覧、\q (または Ctrl-D) で psql から終了します。あとは一般向けの PostgreSQL 解説をお読みください。

投稿2020/12/28 02:12

hoshi-takanori

総合スコア7899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msy7822

2020/12/28 02:20

ご回答ありがとうございます。 上記のやり方で解決できました!! 本当にありがとうございます!!
m.ts10806

2020/12/28 03:58

「回答」という形で埋もれるのが勿体ない内容
guest

0

MacOS のことはよくわかりませんが、少ししらべたところ。

sh

1sudo brew install postgresql

とした方がいいと思われます。

が、質問の文章から推察するに、MacOS に関する知識がサーバーをインストール、運用できるレベルに達していらっしゃらないと思います。
この問題にきちんと対処するためには、MacOS(Unix)のユーザ、アクセス権に関する理解が不可欠です。
いちどそこは参考書なりを読んできちんと理解されてから、インストールされることをお勧めします。

この知識なしではデーターベースサーバの運用はたぶんむりです。
「permisshon denied」の意味、 sudo コマンドの意味に関しては、それらの知識が前提になるのでここでは説明しません。

投稿2020/12/27 14:15

kozuchi

総合スコア1193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msy7822

2020/12/27 14:22

root権限でHomebrewを実行するのって危険ではないのですか??
m.ts10806

2020/12/27 18:59

何をもとに危険だと判断されたのでしょうか。様々な要素に根拠がないままなので、余計に「達していない」という印象を与えています。
msy7822

2020/12/27 23:35

Error: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system. ではこのエラーメッセージは何ですか?
technocore

2020/12/28 00:22 編集

Homebrewの作業についてはsudoをつけて実行してはいけません。 sudoを付けた場合、いくつかのファイルやディレクトリがroot所有者になってしまい、読み書きができなくなってしまいます。 homebrewの所有者はインストールした本人になります。 homebrewのインストール先(基本的には/usr/local)も本人になります。 うっかりsudoで作業してしまった場合は所有者を修復してください。 (/tmpに自動的に作られるファイルも所有者は本人になるはずです。)
hoshi-takanori

2020/12/28 00:52

Homebrew のインストールは root でもできるでしょうけど、一般的にはユーザー権限でインストールする場合が多いと思いますし、ネットの多くの記事もそれを前提にコマンドを紹介されてます。また、brew で入れた postgres はユーザー権限で動かすための設定になってます。大事なことは technocore さんが書いてるように brew を扱うときのユーザーを常に統一することです。
hentaiman

2020/12/28 01:32

エラーメッセージ載せただけで何やったか判断出来ると思ってるのか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問