我正在尝试从bash文件执行一些postgres命令。
我正在尝试通过编写以下行来删除模式
DROP SCHEMA "xxx" IF EXISTS
我在这里有两个问题
我不知道如何指定从哪个数据库中删除模式
我收到以下错误消息 – “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
它的工作原理:-)