Rails and PostgreSQL: Постгреси ролей не існують


106

Я встановив PostgreSQL на своєму Mac OS Lion і працюю над додатком рейки. Я використовую RVM, щоб тримати все окремо від інших моїх програм Rails.

З якоїсь причини, коли я намагаюся перенести db вперше, грабля не може знайти користувача postgres. Я отримую помилку

 FATAL:  role "postgres" does not exist

У мене є pgAdmin, тому я чітко бачу, що в БД є користувач postgres - власне обліковий запис адміністратора - тому я не впевнений, що ще робити.

Я десь читав про людей, які мають проблеми з PostgreSQL, через який шлях він був встановлений, але тоді я не думаю, що я би дістався так далеко, якби не міг знайти db.


Про тісно пов’язану проблему, коли користувач БД (= роль) postgresне створений, що може призвести до того ж повідомлення про помилку, дивіться в цьому пов'язаному питанні: stackoverflow.com/questions/11919391/…
Ервін Брандстеттер

Відповіді:


12

Це повідомлення спливає, коли користувач бази даних не існує. Порівняйте посібник тут .
Кілька локальних баз даних не можуть бути поясненнями. Ролі дійсні для всіх кластерів. Керівництво знову :

Зауважте, що ролі визначаються на рівні кластера бази даних, і тому вони дійсні у всіх базах даних кластера.

Ви повинні закінчувати інший кластер бази даних . Це був би інший сервер, який працює на тій же машині, слухаючи інший порт. Або, швидше за все, на іншій машині.

Можливо, повідомлення приходить насправді з віддаленого сервера?


Це було все - у мене виникли труднощі з тим, щоб отримати postgresql до періоду роботи, тому я зробив нову установку, тому у мене, можливо, зараз є пара примірників. Хоча змінили порт у файлі database.yml, і все це справно працювало. Спасибі за вашу допомогу!
Адам

не працював навіть після очищення всіх зображень - docker rmi $(docker images -q) --force. але питання було на volumesя здогадуюся
prayagupd

267

Насправді, з незрозумілої причини, я виявив, що ця проблема була насправді тому, що роль postgresql не була створена.

Спробуйте запустити:

createuser -s -r postgres

Зауважте, що ролі - це спосіб, яким PostgreSQL підтримує дозволи бази даних . Якщо для користувача postgres немає ніякої ролі, він не може отримати нічого. Команда createuser - це тонка обгортка навколо команд CREATE USER, CREATE ROLE тощо.


8
Мені довелося використовувати, sudo su - postgresперш ніж ця команда працювала на мене. Дякую!
Connor Leech

2
Не знаю, як виникла моя настройка, але я створив postgresql без користувача postgres та ролі, мійUUser як єдиний користувач, але відмовився впустити мене під приводом, що база даних з назвою myUser не існує! ця нерозгадана частина хаосу!
Ієронім

@StuartNelson: Це, здається, є рішенням поширеної проблеми (те саме тут ). Але це очевидно не відповідь на це питання. ОП чітко зазначає, що роль існувала в його БД.
Ервін Брандстеттер

За винятком того, що ви співставляєте ролі з користувачами. Користувач існував, ролі не було - він чітко каже, що користувач існує, а не роль.
Кріс Шерлок

У -rпараметрі параметр не потрібен -s. Суперусер включає атрибут "Створити роль".
Денніс

26

Нещодавно у мене з’явилася ця проблема одразу після встановлення postgres. Якщо він з’являється відразу після встановлення, можливо, не вистачає користувача за замовчуванням postgres. У цьому випадку ви можете створити postgres користувачів за замовчуванням, використовуючи команду нижче.

createuser -s -U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

Він запропонує ввести необхідне ім’я ролі бази даних та пароль. Після завершення процесу ви можете увійти до консолі постгрес за допомогою команди нижче.

psql -U 'your_database_name'

Наприклад: psql -U postgres
Тут вам потрібно ввести пароль, якщо ви його вказали, під час створення користувача.

Сподіваюся, це допомагає :)


22

Я був на OSX 10.8, і все, що я спробував, дав би мені це FATAL: role "USER" does not exist. Як багато хто казав тут, біжіть createuser -s USER, але це дало мені таку ж помилку. Це нарешті спрацювало для мене:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

createuser -s --username=postgresСтворює суперкористувача (опція -s) шляхом підключення, Postgres (--username = POSTGRES прапор).

Я бачу, що на ваше запитання відповіли, але я хочу додати цю відповідь людям, які використовують OSX, які намагаються встановити PostgreSQL 9.2.4.


2
Перші два рядки можна скоротити до sudo su postgres.
6 футів Дана

Це також було рішенням для мене на ubuntu, не забудьте оновити свою database.yml, щоб використовувати те саме ім’я користувача, що і вище
crobicha

10

Я зіткнувся з цим питанням одразу, коли я вперше встановив річ POSTGRES.app Heroku. Після однієї ранкової проби та помилки я думаю, що ця одна лінія коду вирішила проблему. Як було описано раніше, це відбувається тому, що postgresql не виконує роль за замовчуванням при першому його налаштуванні. І нам це потрібно встановити.

sovanlandy=# CREATE ROLE postgres LOGIN;

Ви повинні увійти у відповідну консоль psql, щоб використовувати цю команду psql.

Також зазначалося, що якщо ви вже створили роль 'postgre', але все ж отримуєте помилки дозволу, вам потрібно змінити команду:

sovanlandy=# ALTER ROLE postgres LOGIN;

Сподіваюся, це допомагає!


4

У документації на Heroku; Починаючи з рейок 4, вони кажуть:

Вам також потрібно буде видалити поле імені користувача у database.yml, якщо воно є таким: У файлі config / database.yml delete: username: myapp

Тоді ви просто видалите цей рядок у "development:", якщо ви не pg повідомляє базі даних, яка працює в ролі "myapp"

Цей рядок повідомляє рейкам, що база даних myapp_development повинна працювати під роль myapp. Оскільки у вашій базі даних, швидше за все, немає цієї ролі, ми її видалимо. За допомогою рядка видалення Rails спробує отримати доступ до бази даних як користувач, який зараз увійшов у комп'ютер.

Також не забудьте створити базу даних для розробки:

$createdb myapp_development

Поповніть "myapp" своїм іменем програми


2

Ви можете мати кілька локальних баз даних? Перевірте свою database.ymlта переконайтеся, що ви потрапляєте на потрібний pg db. Використовуйте rails consoleдля підтвердження.


2

Процедура встановлення створює обліковий запис користувача, postgresякий пов'язаний з роллю Postgres за замовчуванням. Щоб використовувати Postgres, ви можете увійти в цей обліковий запис. Але якщо чітко не вказано, додаток для рейків шукає іншу роль, точніше роль, яку має ваше ім'я користувача unix, яке може бути створено не в ролях постгресів.

Щоб подолати це, ви можете створити нову роль, спочатку перейшовши на постгреси ролей за замовчуванням, які були створені під час встановлення

sudo -i -u postgres

Після входу в обліковий запис postgres ви можете створити нового користувача командою:

createuser --interactive

Це підкаже вам деякі варіанти і, виходячи з ваших відповідей, виконайте правильні команди Postgres для створення користувача.

Передайте ім’я ролі та деякі дозволи, і роль буде створено, а потім можна перемістити свій db


1

Моя відповідь була набагато простішою. Просто перейшов до папки db і видалив стовпчик id, який я намагався насильно створити, але який насправді створюється автоматично. Я також видалив USERNAME у файлі database.yml (у папці config).


1

Введіть командний рядок Ubuntu для локального користувача, але не root користувача

sudo -u postgres createuser ім'я користувача

ім'я користувача, вказане вище, повинно відповідати імені, зазначеному в повідомленні "FATAL: роль" ім'я користувача "не існує."

Введіть пароль для імені користувача.

Потім повторно введіть команду, для якої створена роль не існує повідомлення.


0

Я опинився тут після спроби слідувати підручнику Райана Бейтса щодо розгортання до AWS EC2 з гумою. Ось що сталося зі мною: ми створили новий додаток за допомогою "

rails new blog -d postgresql

Очевидно це створює нову програму з pg як базу даних, але база даних ще не була створена. За допомогою sqlite ви просто запускаєте rake db: migrage, однак з pg потрібно спочатку створити базу даних pg. Райан не зробив цього кроку. Команда є rake db:create:all, тоді ми можемо запуститиrake db:migrate

Друга частина - це зміна файлу database.yml. За замовчуванням для імені користувача, коли генерується файл, є "ім'я програми". Однак, швидше за все, ваша роль для адміністратора postgresql - це щось інше (принаймні, це було для мене). Я змінив його на своє ім’я (див. Вище поради щодо створення імені ролі), і мені було добре піти.

Сподіваюся, це допомагає.


0

Після безлічі встановлення та видалення Postgres, ось що зараз, здається, працює для мене послідовно з Os X Mavericks, Rails 4 та Ruby 2.

  1. У файлі database.yml я змінюю імена користувачів за замовчуванням на ім’я свого комп'ютера, яке для мене просто "адміністратор".

  2. У командному рядку запускаю rake db: create: all

  3. Потім запускаю rake db: migrate

  4. Коли я запускаю рейловий сервер і перевіряю місцевого господаря, він говорить "Ласкаво просимо".


0

Ви можете це вирішити, запустивши initdb -U postgres -D /path/to/dataабо запустивши його як postgres користувача, оскільки він за замовчуванням призначений для поточного користувача. GL!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.