我可以使用shell命令恢复整个数据库,
sudo -u postgres psql -c "DROP DATABASE mynewdbname with (FORCE);"
sudo -u postgres psql -c "CREATE DATABASE mynewdbname;"
sudo -u postgres pg_restore -d mynewdbname /home/user/restore_20230824.sql -v
我需要执行一些赠款。实际上我每次都是从shell手动执行这些命令
sudo -u postgres psql
mynewdbname
GRANT ALL ON schema name_of_schema TO application_user_name;
GRANT ALL ON ALL TABLES IN schema name_of_schema TO application_user_name;
和很多其他人
我试图执行命令从正常的 shell 用户,但他们失败了
sudo -u postgres psql -c "GRANT ALL ON schema name_of_schema TO application_user_name;"
ERROR: schema "name_of_schema " does not exist
但是模式name_of_schema
存在,我想这是因为我没有选择数据库。所以我试
sudo -u postgres psql -c "\c mynewdbname; GRANT ALL ON schema name_of_schema TO application_user_name;"
但是它失败了,
\connect: invalid integer value "ON" for connection option "port"
简单地说:我如何从shell对postgres数据库执行命令?
如果有用的话,我在Debian 12下工作。我可以完全访问它,但是我想执行普通用户的所有命令,因为这些命令必须偶尔由不那么聪明的用户[猴子同事]执行。
2条答案
按热度按时间pkwftd7m1#
就像
psql
文档描述的那样:-c ***command***
--command=***command***
指定psql将执行给定的命令字符串
***command***
。[...]***command***
必须是服务器完全可解析的命令字符串(即,它不包含特定于psql的功能),或者是单个反斜杠命令。因此,您不能在-c
选项中混合使用SQL和psql元命令。要实现这一点,你可以使用重复的-c
选项或将字符串导入psql,例如:但最好的解决方案是完全避免使用反斜杠命令,并立即连接到正确的数据库:
stszievb2#
我加上我的两分钱
我可以在PC上执行整个.sql文件,