Управляет постгресом команда pg_ctl. Пользователя указать - флаг -U. Но как ни пытался, все равно принимает за пользователя вызывателя команды.
Я честно долго пытался и гуглил.
Дело происходит на heroku (Ubuntu 14.04), где нельзя вызвать su.
Выдает «FATAL: role „u56407“ does not exist», где u56407 - текущий пользователь оболочки, каждую мою попытку разный. Капец с этим, с сотнями ошибок во время установки как-то справился, а тут ступор, помогите!
Иными словами: если передать в pg_ctl флаг -U, то на вызываемую им команду «postgres» это никак не влияет, а если передать через pg_ctl флаг -U в «postgres» с помощью -o, то «Try „postgres --help“ for more information.», потому что сама утилита postgres такого флага не принимает. То есть она его вообще не принимает. Ок, значит с флагами в этом случае бесполезно. Как можно быть?
-U параметр - это только в windows работает.
И вообще... нефиг одному пользователя что-то запускать от имени другого без специального на то разрешения.
Так что sudo ваше все.
Ну как это к пользователю, к которому нет доступа?
Пользователь postgres - встроенный пользователь в базу.
До того, как её скачал-установил, этого пользователя не было, следовательно, он создался из-под моего пользователя. Но у меня есть идейка как это провернуть, попробую-отпишусь.
И не правда, в почти всех утилитах постгреса в --help есть -U, не будут они для винды эксклюзивные фичи делать. Самое замечательное, что initdb поддерживает -U, который задает суперпользователя вместо postgres, это решит проблему.
Ничего не получается! При разворачивании билдпака я Вася, initdb, pg_ctl start && создание бд и миграция && pg_ctl stop действуют для Васи, а потом при запуске приложения я Петя, и ошибка что пользователь Петя не найден. Помогите пожалуйста, должен быть выход
Правильный и при этом самый простой вариант: переменная окружения PGUSER, в ней можно поставить postgres, который автоматически создастся при initdb, и дальше никаки проблем! Ура! Хероку с её ограниченным плагином pg теперь нервно курит в сторонке.
При разворачивании билдпака юзера зовут u421546, а после успешной установки запускает базу u521682, PGUSER единственный способ, который я долго искал, чтобы использовать одно имя по желанию своему.
Что-то я крепко сомневаюсь... хотя бы по той причине, что когда пользователь делает initdb, то директория с данными кластера создается от его имени и потом другому является недоступной. Я же не знаю, что они там наворотили в облаке с этими билдпаками, может эта и фича, но в стандартных необлачных средах такое не прокатит. И PGUSER тоже не причем, эта переменная вообще используется для клиентских коннектов.
Установка происходит в папку уже не помню, но назовем её /tmp/build/12hj1hbf, и наверняка это отдельный образ убунты. И если баш скрипт ответил 0, то хероку все из этой папки перемещает в /app, при этом меняя права на нового пользователя. А PGUSER очень сильно причем, через флаги пользователя указать никак не получалось, а с этой переменной все получилось.