我想编写一个连接到 PostgreSQL 服务器的程序,以便创建一个新数据库(即,它的第一个语句是
CREATE DATABASE
)。如果您使用没有数据库名称的 JDBC URL(例如,jdbc:postgresql://localhost
),Postgres 会尝试连接到以用户命名的数据库,如果该数据库不存在,则会失败。如何使用 JDBC 连接到服务器但没有特定的数据库?
PostgreSQL 默认有一个名为
postgres
的数据库,其明确目的是接收连接,然后创建或删除数据库。所以你应该使用它。
PostgreSQL 还有两个默认数据库,
template0
和 template1
。前者不接受连接,但后者接受。在非常旧的 PostgreSQL 版本中,在发明 postgres
之前,template1
被用作连接的数据库以创建数据库。问题在于,如果有人 else连接到
CREATE DATABASE
,template1
就会失败,因此并发执行像 createdb
这样的工具会出现竞争条件。
为了安全起见,您可以执行 PostgreSQL 实用程序的操作:连接到
postgres
,如果失败,则连接到 template1
。任何删除这两个数据库的人都会严重破坏他们的数据库集群,因此可以放心地打折扣。