URI connection-string可能非常复杂,这是一个标准的例子:
createdb "postgresql://postgres:postgres@localhost:5432/sandbox"
当然,它不适用于 createdb (“template1:FATAL”),这就是问题所在。 URI与psql
一起正常工作,例如。
psql "postgresql://postgres:postgres@localhost:5432/postgres"
我正在寻找具有预期行为的任何内容,无论命令的名称是否不是createdb
。
PS1:在我的环境中。即使是postgres
用户也有密码等,我的所有程序员都使用 URI连接字符串标准,不再有-U
等选项。这个问题的重点是URI标准。使用现代客户端和连接,v9 +。
PS2:作为其传统和哲学,我们期望PostgreSQL提供的命令中有orthogonal behaviour。关于URI,psql
和pg_dump
是正交的; psql
,pg_dump
和createdb
是关于-U
选项的正交...我预计会有一些关于URI使用的正交性...
或者有一个架构错误?
答案 0 :(得分:4)
clusterdb,createdb,createuser,dropdb,dropuser,reindexdb和vacuumdb是实用程序命令,它们围绕SQL命令进行包装。尽管没有被正式弃用,但它们在任何人关心的程序列表中都不高。如今,大多数人都使用某种脚本来完成他们的工作。如果要使用客户端程序和URI来创建数据库,则:
psql "postgresql://postgres:postgres@localhost:5432/postgres" -c 'CREATE DATABASE my_test_db'
Null display is "NULL".
CREATE DATABASE
或使用以下命令传递文件:
psql "postgresql://postgres:postgres@localhost:5432/postgres" -f db_create.sql
更新12/05/2020
似乎有一个未记录的功能现已被揭示。对于大多数这些命令(不是* user),有一个--maintenance-db
选项。来自CREATEDB个开发文档:
-maintenance-db = dbname
指定在创建新数据库时要连接的数据库的名称。如果未指定,将使用postgres数据库。如果不存在(或者它是正在创建的新数据库的名称),将使用template1。这可以是连接字符串。如果是这样,连接字符串参数将覆盖所有冲突的命令行选项。
其中的连接字符串可以是URI
。
答案 1 :(得分:1)
您可以尝试设置{{3}中所述的public abstract class MyClass{
public MyClass(String s){
...
}
}
,PGHOST
,PGHOSTADDR
,PGPORT
,PGDATABASE
和PGUSER
环境变量}}文档部分。
希望这会有所帮助。
答案 2 :(得分:0)
https://www.postgresql.org/docs/current/static/app-createdb.html createdb不声称接受URI作为dbname,而psql做: https://www.postgresql.org/docs/current/static/app-psql.html
当你
时会发生什么public class MyController implements Initializable {
...
@FXML
private Textfield textField;
public void initialize() {
textField.focusedProperty().addListener((ov, oldV, newV) -> {
if (!newV) { // focus lost
// Your code
}
});
}
}
它应该按原样读取第一个参数并使用这样的名称创建数据库(这对我来说顺便说一下):
createdb "postgresql://postgres:postgres@localhost:5432/sandbox"
此行为符合手册:
DBNAME
指定要创建的数据库的名称。
要创建数据库的名称,而psql dbname可以是用于连接到数据库的数据库...