从Postgresql拖放模式

我正在尝试从bash文件执行一些postgres命令。

我正在尝试通过编写以下行来删除模式

DROP SCHEMA "xxx" IF EXISTS 

我在这里有两个问题

  1. 我不知道如何指定从哪个数据库中删除模式

  2. 我收到以下错误消息 – “DROP:命令未find”

任何人都可以帮我解决这个问题吗?

您不能直接从bash脚本执行SQL语句。 使用psql将命令发送到数据库服务器。 如果你有一个(或几个)SQL语句执行,你可以这样做

 psql -d YOUR_DB_NAME -c "YOUR_SQL_STATEMENT" 

确保您的SQL语句不包含引号或适当地转义它们。 如果你在一个文件中有许多SQL语句,你可以像这样执行所有的语句

 psql -d YOUR_DB_NAME -f FILENAME 

在上面的YOUR_DB_NAME应该用您的数据库名称YOUR_SQL_STATEMENTreplace为要执行的SQL语句,而FILENAME是使用SQL语句执行的文件的名称。

如果您需要指定额外的参数,如用户名,请检查命令的用法消息显示与psql -?

另外请注意, DROP SCHEMA的语法不正确。 它应该是

 DROP SCHEMA IF EXISTS schema_name; 

另请参阅此文档 。

当然Adam Zalcman

这是最终的解决scheme

DBNAME = “XXXX”

制作完整分贝的副本

pg_dump $ dbname> mydb.backup

备份我们想要的模式

pg_dump $ dbname -s -N'public'> test.out

删除用户定义的模式

psql -d $ dbname -c“DROP SCHEMA如果存在aaa CASCADE”psql -d $ dbname -c“DROP SCHEMA如果存在bbb CASCADE”

恢复架构以恢复相应的权限

cat test.out | psql $ dbname

它的工作原理:-)