私はpostgresの初心者です。
私はmac用postgres.appをインストールしました。私はpsqlコマンドで遊んでいて、誤ってpostgresデータベースを削除しました。何があったのかわかりません。
私は現在チュートリアルに取り組んでいます: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/ /
そして私はSudo -u postgres psql postgres
で立ち往生しています
エラーメッセージ:psql: FATAL: role "postgres" does not exist
$ which psql
/Applications/Postgres.app/Contents/MacOS/bin/psql
これがpsql -l
から出力されるものです。
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+------------+----------+---------+-------+---------------------------
user | user | UTF8 | en_US | en_US |
template0 | user | UTF8 | en_US | en_US | =c/user +
| | | | | user =CTc/user
template1 | user | UTF8 | en_US | en_US | =c/user +
| | | | | user =CTc/user
(3 rows)
それで、私がとるべきステップは何ですか? psqlに関連するすべてのものを削除し、すべてを再インストールしますか?
助けてくれてありがとう!
注:homebrewを使用してpostgresをインストールした場合は、以下の@ user3402754のコメントを参照してください。
エラーメッセージはではなく欠落しているデータベースについて話し、欠落している役割について話していることに注意してください。ログインプロセスの後半で、不足しているデータベースにつまずくこともあります。
しかし、最初のステップは、欠落している役割をチェックすることです。コマンド\du
のpsql
内の出力は何ですか?私のUbuntuシステムでは、関連する行は次のようになります。
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
superuser
を持つロールが少なくとも1つない場合、問題があります:-)
ある場合は、それを使用してログインできます。 \l
コマンドの出力を見ると、template0
およびtemplate1
データベースに対するuser
の権限は、スーパーユーザーpostgres
のUbuntuシステムと同じです。したがって、単純なセットアップでは、user
をスーパーユーザーとして使用すると思います。このコマンドを試してログインできます:
Sudo -u user psql user
user
が実際にDBスーパーユーザーである場合、別のDBスーパーユーザーと、彼のためのプライベートな空のデータベースを作成できます。
CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;
ただし、postgres.appのセットアップではこれを行っていないようですので、そうすべきではありません。チュートリアルを簡単に調整します。
キーは "私はmac用postgres.appをインストールした"です。 このアプリケーション はロール名があなたのログイン(ショート)名と同じであるデータベーススーパーユーザでローカルPostgreSQLインストールをセットアップします。
Postgres.appが最初に起動すると、$ USERデータベースが作成されます。これは、何も指定されていない場合のpsqlのデフォルトデータベースです。デフォルトのユーザーはパスワードなしの$ USERです。
いくつかのスクリプト(例えば、Linuxシステム上でpgdump
で作成されたデータベースのバックアップ)やチュートリアルでは、スーパーユーザーはpostgres
という伝統的なロール名を持っていると仮定します。
あなたはあなたのローカルインストールをもう少し伝統的に見せて、一度することによってこれらの問題を避けることができます:
/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres
これらは 致命的になるでしょう:ロール "postgres"は存在しません 消えます。
Mac用:
brew install postgres
initdb /usr/local/var/postgres
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
または/usr/local/opt/postgres/bin/createuser -s postgres
。pg_ctl -D /usr/local/var/postgres start
起動時にサーバーを起動する
mkdir -p ~/Library/LaunchAgents
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
これでセットアップされ、psql -U postgres -h localhost
を使用してログインするか、またはGUIにPgAdminを使用します。
デフォルトでは、ユーザpostgres
はログインパスワードを持ちません。
このようなより多くの記事のためのこの場所を点検しなさい: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7
createuser postgres --interactive
またはスーパーユーザーをpostgresにするだけで
createuser postgres -s
私にとって、このコードはうまくいきました:
/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres
それはここから来ました: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
最初に あなたはユーザーを作成する必要があります:
Sudo -u postgres createuser --superuser $USER
の後にデータベースを作成します。
Sudo -u postgres createdb $USER
$USER
をシステムのユーザー名に変更します。
あなたは完全な解決策を見ることができます ここ 。
$PGUSER
の設定を解除する必要があります。
$ unset PGUSER
$ createuser -s postgres
コマンドラインでこれを実行すると修正されるはずです
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
これは、initdb
ユーザー名を--username=postgres
または-U postgres
で指定せずに、IDがpostgres
ではないユーザーでpostgres
を実行した場合に発生します。
Initdbを実行するために使用したシステムのユーザーアカウントを使用してデータベースクラスタが作成され、スーパーユーザー権限が与えられます。
これを修正するには、Postgresに付属のpostgres
ユーティリティを使って、オプション--superuser
を付けてcreateuser
という名前の新しいユーザーを作成するだけです。このユーティリティはPostgresのbin
ディレクトリにあります。例えば.
createuser --superuser postgres
カスタムのホスト名またはポートがある場合は、必ず 適切なオプションを設定してください 。
Initdbによって作成された他のユーザーアカウントを忘れずに削除してください。
postgres
name__データベースを削除しても問題ありません。このデータベースは最初は空であり、その目的は単にpostgres
name__ユーザーが接続するための一種の「ホーム」を持つことです。
それでも、あなたはSQLコマンドCREATE DATABASE postgres;
でそれを作り直すかもしれません
質問で言及されているチュートリアルはpostgres.app
を念頭に置いて書かれていないことに注意してください。一般的なUnix用のPostgreSQLとは反対に、postgres.app
は通常のユーザーとは異なる特権を持つ専用のpostgres
name__ユーザーによって実行されるサービスとは対照的に、通常のアプリケーションのように見えます。 postgres.app
はあなた自身のアカウントで実行、管理されています。
そのため、このコマンド:Sudo -u postgres psql -U postgres
の代わりに、postgres.appの精神に従うことをお勧めします。psql
name__は、ユーザー名と一致するデータベースに自動的に接続し、スーパーユーザーになるdbアカウントを使用しますそのため、パーミッション的には何でもできます。
それが価値があるもののために、私はubuntuと多くのパッケージをインストールしました、そしてそれはそれと衝突しました。
私にとって正しい答えは:
Sudo -i -u postgres-xc
psql
これは私のためにそれを修正した唯一のものです:
createuser -s -U $USER
Ubuntuシステムでは、PostgreSQLを削除して再インストールしました。すべてのデータベースが復元されます。これで問題は解決しました。
アドバイス - データベースのバックアップを取って、安全性を高めます。
私は前日にbrew services stop postgresql
を実行したことでこの問題に行き詰まった。
翌日:brew services start postgresql
は機能しませんでした。これは、自作を使ってインストールしたときに表示されるとおりです。 postgresqlはlaunchd ...を使用します。これはあなたのコンピュータの電源が入った時にロードされます。
解決:brew services start postgresql
コンピュータを再起動してください。
\du
コマンドは以下を返します。
ロール名=
postgres@implicit_files
そしてそのコマンドpostgres=# \password postgres
はエラーを返します。
エラー:役割 "postgres"は存在しません。
しかし、postgres=# \password postgres@implicit_files
は問題なく動作します。
Sudo -u postgres createuser -s postgres
の後でも、最初の変種は動作します。
Psql -lがデータベースのリストを返すので、私はここでSudoが必要だとは思わない。これはinitdbがpostgresユーザーの下ではなく、ユーザーの現在のユーザーの下で実行されたことを私に告げています。
あなただけです:
psql
そしてチュートリアルを続けてください。
多くのアプリケーションがこれが存在することを期待しているかもしれないので、私はA.Hがpostgresユーザーとdbを作成する一般的なポイントを提案するでしょう。
簡単な説明
PostgreSQLはオペレーティングシステムへの管理者権限では動作しません。代わりに通常のユーザーで実行し、ピア認証をサポートするために(接続しようとしているOSに問い合わせる)、初期化プロセスを実行するユーザーでユーザーとdbを作成します。この場合それはあなたの普通のユーザーでした。