Postgresql ошибка роль не существует

I have been reading this tutorial. There is the below command to login as a user:

# login as user "user"
psql -U user

when I execute the above command, I get an error saying the following:

psql: FATAL:  role "user" does not exist

The only help I saw online was here, the have said the following:

FATAL: role «myusername» does not exist

By default PostgreSQL connects to the PostgreSQL user with the same
name as the current unix user. You have not created a PostgreSQL user
by that name in your database.

Create a suitable user, or specify a different username to connect
with. In the command line tools the -U flag does this.

But I still don’t quite understand why I am getting this error.

halfer's user avatar

halfer

19.8k17 gold badges98 silver badges185 bronze badges

asked Sep 3, 2015 at 10:59

Alexander Solonik's user avatar

Alexander SolonikAlexander Solonik

9,74818 gold badges73 silver badges173 bronze badges

1

You have first to login in a linux shell as the user postgres and than create new postgres user with the command createuser. The system user postgres is created automatically by the Postgres installer.

Execute this code in the console (change your_username with a username of your choice):

sudo -u postgres -i
createuser -l -d -P your_username

Better you create a database with the same name too (this makes the login later easier):

createdb your_username -O your_username

Then you should be able to connect in psql with

psql -h localhost -U your_username

answered Sep 3, 2015 at 13:07

Tom-db's user avatar

Please check to see if the user exists.

dg

If not, you need what is missing in the tutorial and you edit it if necessary.

CREATE USER user WITH PASSWORD '<here you password>';

answered Sep 3, 2015 at 12:45

René's user avatar

RenéRené

813 bronze badges

I’m setting up my PostgreSQL 9.1. I can’t do anything with PostgreSQL: can’t createdb, can’t createuser; all operations return the error message

Fatal: role h9uest does not exist

h9uest is my account name, and I sudo apt-get install PostgreSQL 9.1 under this account.
Similar error persists for the root account.

Erwin Brandstetter's user avatar

asked Aug 12, 2012 at 3:00

h9uest's user avatar

7

Use the operating system user postgres to create your database — as long as you haven’t set up a database role with the necessary privileges that corresponds to your operating system user of the same name (h9uest in your case):

sudo -u postgres -i

As recommended here or here.

Then try again. Type exit when done with operating as system user postgres.

Or execute the single command createuser as postgres with sudo, like demonstrated by
dsrees in another answer.

The point is to use the operating system user matching the database role of the same name to be granted access via ident authentication. postgres is the default operating system user to have initialized the database cluster. The manual:

In order to bootstrap the database system, a freshly initialized
system always contains one predefined role. This role is always a
“superuser”, and by default (unless altered when running initdb) it
will have the same name as the operating system user that initialized
the database cluster. Customarily, this role will be named postgres.
In order to create more roles you first have to connect as this
initial role.

I have heard of odd setups with non-standard user names or where the operating system user does not exist. You’d need to adapt your strategy there.

Read about database roles and client authentication in the manual.

answered Aug 12, 2012 at 4:13

Erwin Brandstetter's user avatar

Erwin BrandstetterErwin Brandstetter

595k144 gold badges1056 silver badges1214 bronze badges

6

After trying many other people’s solutions, and without success, this answer finally helped me.

https://stackoverflow.com/a/16974197/2433309

In short, running

sudo -u postgres createuser owning_user

creates a role with name owning_user (in this case, h9uest). After that you can run rake db:create from the terminal under whatever account name you set up without having to enter into the Postgres environment.

Vaibhav Mule's user avatar

Vaibhav Mule

4,9764 gold badges35 silver badges52 bronze badges

answered Sep 9, 2013 at 23:27

dsrees's user avatar

dsreesdsrees

6,0662 gold badges26 silver badges26 bronze badges

9

sudo su - postgres

psql template1

creating role on pgsql with privilege as «superuser»

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

Then create user

CREATE USER username; 
eg. CREATE USER demo;

Assign privilege to user

GRANT ROOT TO username;

And then enable login that user, so you can run e.g.: psql template1, from normal $ terminal:

ALTER ROLE username WITH LOGIN;

the's user avatar

the

20.8k11 gold badges68 silver badges101 bronze badges

answered May 29, 2014 at 13:35

Mohammed Saleem's user avatar

Mohammed SaleemMohammed Saleem

1,8731 gold badge11 silver badges6 bronze badges

5

This works for me:

psql -h localhost -U postgres

ssbl's user avatar

ssbl

432 silver badges6 bronze badges

answered Aug 12, 2014 at 11:39

mateusz.szymborski's user avatar

4

Installing postgres using apt-get does not create a user role or a database.

To create a superuser role and a database for your personal user account:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)

answered Jul 18, 2016 at 19:01

Miles Erickson's user avatar

Miles EricksonMiles Erickson

2,5742 gold badges17 silver badges18 bronze badges

2

psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;

answered Apr 7, 2019 at 15:08

Abel's user avatar

AbelAbel

3,93932 silver badges31 bronze badges

4

For version Postgres 9.5 use following comand:

psql -h localhost -U postgres

Hope this will help.

answered Jan 13, 2019 at 5:07

Kalyan Halder's user avatar

0

Working method,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer
    here change peer to trust
  3. restart, sudo service postgresql restart

  4. now try, psql -U postgres

answered Sep 10, 2017 at 16:23

Mohideen bin Mohammed's user avatar

2

I did a healthcheck with docker-compose.

healthcheck:
  test: ['CMD-SHELL', 'pg_isready']
  interval: 5s
  timeout: 5s
  retries: 5

If you also have that change the user:

healthcheck:
  test: ['CMD-SHELL', 'pg_isready -U postgres'] # <<<---
  interval: 5s
  timeout: 5s
  retries: 5

answered Aug 7, 2021 at 8:07

Jan's user avatar

JanJan

11.8k9 gold badges52 silver badges87 bronze badges

For Windows users : psql -U postgres

You should see then the command-line interface to PostgreSQL: postgres=#

answered Feb 8, 2019 at 12:13

Andriy Tolstoy's user avatar

Andriy TolstoyAndriy Tolstoy

5,6322 gold badges31 silver badges30 bronze badges

1

In local user prompt, not root user prompt, type

sudo -u postgres createuser <local username>

Then enter password for local user.

Then enter the previous command that generated «role ‘username’ does not exist.»

Above steps solved the problem for me.
If not, please send terminal messages for above steps.

Erwin Brandstetter's user avatar

answered Jun 21, 2015 at 20:28

Robert Cambil's user avatar

0

Manually creating a DB cluster solved it in my case.

For some reason, when I installed postgres, the «initial DB» wasn’t created. Executing initdb did the trick for me.

This solution is provided in the PostgreSQL Wiki — First steps:

initdb

Typically installing postgres to your OS creates an «initial DB» and starts the postgres server daemon running. If not then you’ll need to run initdb

Community's user avatar

answered Aug 28, 2018 at 19:53

Natacha's user avatar

NatachaNatacha

1,12415 silver badges23 bronze badges

0

sudo -u postgres createuser --superuser $USER

sudo -u postgres createdb $USER

This should definitely work for you.

answered Jul 25, 2022 at 13:05

Boy Nandi's user avatar

dump and restore with --no-owner --no-privileges flags

e.g.

dump — pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

restore — pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

answered Jul 25, 2019 at 12:29

srghma's user avatar

srghmasrghma

4,7002 gold badges38 silver badges54 bronze badges

for those who using docker and correctly followed the instructions from official doc, if you still met this problem, RESTART windows and try again.

answered Apr 27, 2022 at 4:57

Siwei's user avatar

SiweiSiwei

19.3k6 gold badges73 silver badges94 bronze badges

Follow These Steps and it Will Work For You :

  1. run msfconsole
  2. type db_console
  3. some information will be shown to you chose the information who tell you to make: db_connect user:pass@host:port.../database sorry I don’t remember it but it’s like this one then replace the user and the password and the host and the database with the information included in the database.yml in the emplacement: /usr/share/metasploit-framework/config
  4. you will see. rebuilding the model cache in the background.
  5. Type apt-get update && apt-get upgrade after the update restart the terminal and lunch msfconsole and it works you can check that by typing in msfconsole: msf>db_status you will see that it’s connected.

always-a-learner's user avatar

answered Aug 17, 2017 at 10:20

Loli Pronoms's user avatar

Follow these steps to get postgres working.

  1. In your terminal, locate the Application Support folder with the following command.
    /Users/[name of the user]/library/application support
  2. Delete the application, Postgres.
  3. Reinstall the app and it should work just fine.

answered Jul 11, 2021 at 5:48

Oteri Eyenike's user avatar

Something as simple as changing port from 5432 to 5433 worked for me.

answered Aug 12, 2020 at 0:23

Guka Nozadze's user avatar

1

Используйте пользователя postgres операционной системы для создания вашей базы данных — если вы не настроили роль базы данных с необходимыми привилегиями, соответствующими пользователю вашей операционной системы с таким же именем (h9uest в вашем случае):

sudo -u postgres -i

Как рекомендуется здесь или здесь.

Тогда попробуйте еще раз. Напечатайте exit когда закончите с работой как системный пользователь postgres.

Или выполните одну команду createuser как postgres с sudo, как продемонстрировано drees в другом ответе.

Смысл заключается в том, чтобы использовать пользователя операционной системы, совпадающего с ролью базы данных с тем же именем, для предоставления доступа через ident аутентификацию. postgres — это пользователь операционной системы по умолчанию, который инициализировал кластер базы данных. Руководство:

Для начальной загрузки системы базы данных, недавно инициализированная система всегда содержит одну предопределенную роль. Эта роль всегда является «суперпользователем», и по умолчанию (если она не изменена при запуске initdb) она будет иметь то же имя, что и пользователь операционной системы, который инициализировал кластер базы данных. Обычно эта роль будет называться postgres. Чтобы создать больше ролей, сначала необходимо подключиться к этой начальной роли.

Я слышал о странных установках с нестандартными именами пользователей или о том, где пользователь операционной системы не существует. Вам нужно будет адаптировать свою стратегию там.

Читайте о ролях базы данных и аутентификации клиента в руководстве.

Я начинающий новичок.

Я установил postgres.app для mac. Я играл с командами psql, и я случайно уронил базу данных postgres. Я не знаю, что было в нем.

В настоящее время я работаю над учебником: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

И я застрял в sudo -u postgres psql postgres

СООБЩЕНИЕ ОШИБКИ: psql: FATAL: role "postgres" does not exist

$, который 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 и переустановить все?

Спасибо за помощь ребятам!

4b9b3361

Ответ 1

ПРИМЕЧАНИЕ. Если вы установили postgres с помощью homebrew, см. комментарий @user3402754 ниже.

Обратите внимание, что сообщение об ошибке НЕ говорит об отсутствующей базе данных, оно говорит об отсутствующей роли. Позже в процессе входа в систему он также может наткнуться на отсутствующую базу данных.

Но первым шагом является проверка отсутствующей роли: что выводится в psql команды du? В моей системе Ubuntu соответствующая строка выглядит следующим образом:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

Если в superuser нет хотя бы одной роли, значит, у вас проблема :-)

Если есть, вы можете использовать это для входа в систему. И, глядя на вывод вашей команды l: разрешения для user в базах данных template0 и template1 такие же, как в моей системе Ubuntu для суперпользователя postgres. Поэтому я думаю, что ваша простая установка использует user в качестве суперпользователя. Таким образом, вы можете попробовать эту команду для входа в систему:

sudo -u user psql user

Если user действительно является суперпользователем БД, вы можете создать для него другого суперпользователя БД и частную пустую базу данных:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

Но так как ваша установка postgres.app, похоже, не делает этого, вы также не должны этого делать. Простая адаптация учебника.

Ответ 2

Ключ «Я установил postgres.app для Mac». Это приложение устанавливает локальную установку PostgreSQL с суперпользователем базы данных, чье имя роли совпадает с вашим логином (коротким).

Когда Postgres.app запускается впервые, он создает базу данных $ USER, которая является базой данных по умолчанию для psql, если ни одна из них не указана. Пользователь по умолчанию — $ USER, без пароля.

Некоторые сценарии (например, резервная копия базы данных, созданная с помощью pgdump в системе Linux) и учебные пособия предполагают, что суперпользователь имеет традиционное имя роли postgres.

Вы можете сделать вашу локальную установку более традиционной и избежать этих проблем, выполнив один раз:

/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres

что сделает тех ФАТАЛЬНЫМИ: роль «postgres» не существует.

Ответ 3

Для MAC:

  1. Установить Homebrew
  2. brew install postgres
  3. initdb/usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres или /usr/local/opt/postgres/bin/createuser -s postgres которые будут использовать только последнюю версию.
  5. запустить сервер 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 или используйте PgAdmin для GUI.

По умолчанию у пользователя postgres не будет пароля для входа.

Зайдите на этот сайт, чтобы найти больше статей, подобных этой: https://medium.com/@Nithanaroy/install-postgres-on-mac-18f017c5d3f7

Ответ 4

createuser postgres --interactive

или сделать postgresl суперпользователя только с

createuser postgres -s

Ответ 5

Для меня этот код работал:

/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres

он пришел отсюда:
http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

Ответ 6

Сначала вам нужно создать пользователя:

sudo -u postgres createuser --superuser $USER

После вы создаете базу данных:

sudo -u postgres createdb $USER

Измените $USER на системное имя пользователя.

Вы можете увидеть полное решение здесь.

Ответ 7

Это происходит, когда вы запускаете initdb с пользователем, чей ID не postgres, без указания имени пользователя postgres с помощью --username=postgres или -U postgres.

Затем создается кластер базы данных с системной учетной записью пользователя, которую вы использовали для запуска initdb, и ему предоставляются разрешения суперпользователя.

Чтобы это исправить, просто создайте нового пользователя с именем postgres с опцией --superuser с помощью утилиты createuser, поставляемой с Postgres. Эта утилита находится в каталоге Postgres bin. например,

createuser --superuser postgres

Если у вас есть пользовательское имя хоста или порт, обязательно установите соответствующие параметры.

Не забудьте удалить другую учетную запись пользователя, созданную для вас initdb.

Ответ 8

Мне нужно было $PGUSER:

$ unset PGUSER
$ createuser -s postgres

Ответ 9

Запуск этого в командной строке должен исправить его

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>

Ответ 10

Отбрасывание базы данных postgres не имеет значения. Эта база данных изначально пуста, и ее целью является просто для пользователя postgres иметь своего рода «домашний» для подключения к нему, если он понадобится.

Тем не менее вы можете воссоздать его с помощью команды SQL CREATE DATABASE postgres;

Обратите внимание, что учебник, упомянутый в вопросе, не написан с учетом postgres.app.
В отличие от PostgreSQL для Unix в целом, postgres.app пытается выглядеть как обычное приложение, в отличие от службы, которая будет выполняться выделенным пользователем postgres, имеющим разные привилегии, чем ваш обычный пользователь. postgres.app запускается и управляется вашей собственной учетной записью.

Итак, вместо этой команды: sudo -u postgres psql -U postgres было бы больше в духе postgres.app просто выпустить: psql, который автоматически соединяется с базой данных, соответствующей вашему имени пользователя, и с учетной записью db одно и то же имя, которое является суперпользователем, поэтому он может делать все необходимые разрешения.

Ответ 11

Для чего это стоит, у меня установлено ubuntu и многие пакеты, и он вступил в конфликт с ним.

Для меня правильный ответ был:

sudo -i -u postgres-xc
psql

Ответ 12

Это единственное, что зафиксировало это для меня:

createuser -s -U $USER

Ответ 13

Я столкнулся с этой проблемой после сборки PostgreSQL с использованием Homebrew из-за конфликта OpenSSL.

Я предлагаю следующее:

Переустановить OpenSSL

brew remove openssl
brew install openssl

Формирование символической ссылки для OpenSSL

brew link --force openssl

Создать новую роль
Следует отметить, что в целях безопасности моя установка включает учетную запись администратора, которая отделена от моей стандартной учетной записи. Приведенные ниже счета могут быть изменены по мере необходимости.

sudo -u <administrator account> createuser <standard account> -d -P

Этот метод создаст базу данных, используя <standard account> в качестве имени, а также установит для нее пароль. Флаги в конце можно удалить, если это нежелательно.

Наконец, операции postgresql, такие как createdb <dbname>, могут использоваться без предшествующих ошибок FATAL.

Ответ 14

В системе Ubuntu я удалил PostgreSQL и переустановил его. Все базы данных восстановлены. Это решило проблему для меня.

Совет: сделайте резервную копию баз данных, чтобы быть на более безопасной стороне.

Ответ 15

Я не думаю, что здесь требуется sudo, потому что psql -l возвращает список баз данных. Это говорит мне, что initdb запускался под пользователем текущего пользователя, а не под пользователем postgres.

Вы можете просто:

psql

И продолжайте учебник.

Я бы предложил A.H общие моменты создания пользователя postgres и db, потому что многие приложения могут ожидать, что это будет существовать.

Краткое объяснение:

PostgreSQL не будет запускаться с административным доступом к операционной системе. Вместо этого он запускается с обычным пользователем, и для поддержки одноранговой аутентификации (запрашивающей ОС, которая пытается подключиться) он создает пользователя и db с пользователем, который запускает процесс инициализации. В этом случае это был ваш обычный пользователь.

Ответ 16

Я застрял в этой проблеме, выполнив brew services stop postgresql за день до этого.
На следующий день: brew services start postgresql не работает. Это происходит потому, что показано, когда вы устанавливаете с помощью homebrew. postgresql использует startd… который загружается, когда ваш компьютер включен. Разрешение

brew services start postgresql
Перезагрузите компьютер.

Ответ 17

Команда du return:

Имя роли = [email protected]_files

И эта команда postgres=# password postgres возвращает ошибку:

ОШИБКА: роли «postgres» не существует.

Но это postgres=# password [email protected]_files работает нормально.

Также после sudo -u postgres createuser -s postgres также работает первый вариант.

причины проблемы

Postgresql не может использовать пользователя root для запуска службы, поэтому вы должны переключиться на другого пользователя, чтобы запустить обычную службу, но иногда нам нужно использовать пользователя root для использования postgresql

Решение

метод первый

Не используйте postgresql как пользователь root без необходимости

Метод второй

Вручную создайте корневую роль, здесь я использую имя пользователя postgres для запуска службы postgresql

su postgres
# Создать пользователя root
postgres=#create user root with password 'password';    
CREATE ROLE

 # Предоставить права доступа к базе данных пользователю root
postgres=# GRANT ALL PRIVILEGES ON DATABASE mydatabase to root;
GRANT

 # Измените пользователя на суперпользователя (см. Фактические потребности)
postgres=# ALTER ROLE root WITH SUPERUSER;

postgres=# q

Вы также можете напрямую создать root как суперпользователь, вход в систему означает разрешение входа в систему

CREATE ROLE root superuser PASSWORD 'password' login;

Понравилась статья? Поделить с друзьями:
  • Postgresql ошибка ошибочный литерал массива
  • Postgresql ошибка операции администрирования
  • Postgresql ошибка не удалось открыть файл
  • Postgresql ошибка кодировки
  • Postgresql ошибка column does not exist