[servername]# su postgres -c 'cd ~; psql -c "SELECT * FROM pg_catalog.pg_user WHERE usename LIKE name;"'
ERROR: column "name" does not exist
LINE 1: SELECT * FROM pg_catalog.pg_user WHERE usename LIKE name;
^
Пробовал разными способами, но ни один из них не возвращает правильный ответ. Может быть, есть более красивый способ делать запросы из командной строки?
Да, он начинает ждать ввода, как если бы вы просто набрали «command1 \»
/usr/local/pgsql15/bin/psql -c "SELECT * FROM pg_catalog.pg_user WHERE usename like 'admin'"
сделать его двухстрочным.
/usr/local/pgsql15/bin/psql test15 -c \
"SELECT * FROM pg_catalog.pg_user WHERE usename like 'admin'"
или
/usr/local/pgsql15/bin/psql test15 <<<"SELECT * FROM pg_catalog.pg_user WHERE usename like 'admin'"
или
echo "SELECT * FROM pg_catalog.pg_user WHERE usename like 'admin'" | /usr/local/pgsql15/bin/psql test15
знак процента все еще работает.
/usr/local/pgsql15/bin/psql test15 -c \
"SELECT * FROM pg_catalog.pg_user WHERE usename like '%admi%'"
Проблема в том, что в одной строке мне нужно переключить пользователя и его каталог, иначе команда также не будет выполняться
@АлексейПашнин используйте для psql опцию -U.
Мне нужно переключить пользователя ОС, а не пользователя БД
Я знаю. это сложно. Я не знаю. один обходной путь: psql -U postgres.
после того, как вы находитесь в psql, тогда \! изменить каталог.
пример: psql -U postgres -d postgres -c "\ du" return: psql: FATAL: одноранговая аутентификация не удалась для пользователя "postgres", поэтому мне не нужно использовать какой-либо пароль, мне нужно имитировать обычное использование командной строки путем переключения пользователь ОС
можешь попробовать stackoverflow.com/questions/18664074/… тогда можешь попробовать sudo psql --host=localhost --dbname=database-name --username=postgres
Последняя cmd запрашивает ввод пароля, и способ из вопроса выше я видел, но не могу изменить конфиг файл
Я нашел способ, напишите здесь отдельным ответом
su postgres -c "cd ~; psql -c 'SELECT * FROM pg_catalog.pg_user WHERE usename LIKE '\'name\'';'"
Пожалуйста, не публикуйте только код в качестве ответа, но также объясните, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и качественны, и с большей вероятностью привлекут положительные голоса.
Вы пробовали:
su postgres -c 'cd ~; psql -c "SELECT * FROM pg_catalog.pg_user WHERE usename LIKE \'name\';"'
?