postgresql 如何从shell中执行GRANT命令?

ryevplcw  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(131)

我可以使用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下工作。我可以完全访问它,但是我想执行普通用户的所有命令,因为这些命令必须偶尔由不那么聪明的用户[猴子同事]执行。

pkwftd7m

pkwftd7m1#

就像psql文档描述的那样:
-c ***command***
--command=***command***
指定psql将执行给定的命令字符串***command***。[...]
***command***必须是服务器完全可解析的命令字符串(即,它不包含特定于psql的功能),或者是单个反斜杠命令。因此,您不能在-c选项中混合使用SQL和psql元命令。要实现这一点,你可以使用重复的-c选项或将字符串导入psql,例如:

psql -c '\x' -c 'SELECT * FROM foo;'

但最好的解决方案是完全避免使用反斜杠命令,并立即连接到正确的数据库:

sudo -u postgres psql -d mynewdbname -c "GRANT ALL ON schema name_of_schema TO application_user_name"
stszievb

stszievb2#

我加上我的两分钱
我可以在PC上执行整个.sql文件,

sudo -u postgres psql -d <name_of_db> -f /path/to/file_to_execute.sql

相关问题