我想通过JDBC创建一个不存在的数据库。与MySQL不同,PostgreSQL不支持create if not exists语法。实现这一目标的最佳方法是什么?
应用程序不知道数据库是否存在。它应该进行检查,如果数据库存在,就应该使用它。因此,连接到所需的数据库是有意义的,如果由于不存在数据库而导致连接失败,它应该创建新的数据库(通过连接到默认的postgres数据库)。我检查了Postgres返回的错误代码,但我找不到任何种类相同的相关代码。
实现这一点的另一种方法是连接到postgres数据库,并检查所需的数据库是否存在,然后采取相应的操作。第二个问题有点单调乏味。
有没有办法在Postgres中实现这一功能?
发布于 2021-06-03 22:12:57
在我看来,在阅读完所有这些复杂的解决方案后,我几乎忘记了有一种简单的方法可以在shell级别上处理它。尽管这可能不是一些人想要的,但我认为很多人想要简单,而不是创建过程和复杂的构造。
我正在使用docker,下面是我的bash脚本中的重要片段,它在devsetup中加载数据:
execute_psql_command_pipe () {
$DOCKER_COMMAND exec -it $POSTGRES_CONTAINER bash -c "echo \"$1\"| psql -h localhost -U postgres || echo psql command failed - object likely exists"
}
read -r -d '' CREATE_USER_COMMANDS << EOM
create user User1 WITH PASSWORD 'password';
create user User2 WITH PASSWORD 'password';
EOM
execute_psql_command_pipe "$CREATE_USER_COMMANDS"它有一些错误,但这是我能找到的最简单的方法来让它做我想要的:在第一次通过脚本时创建,在第二次通过时继续。顺便说一句,echo输出不会显示,但命令会继续,因为echo命令会以0退出。
可以对任何命令(如db create)执行相同的操作。对于可能发生的任何其他错误,这显然也会失败(或成功,取决于透视图),但您将获得psql输出打印机,因此可以添加更多处理。
https://stackoverflow.com/questions/18389124
复制相似问题