如何使用带有createdb和URI的终端?

时间:2018-02-11 12:55:52

标签: postgresql database-connection uri

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,psqlpg_dump是正交的; psqlpg_dumpcreatedb是关于-U选项的正交...我预计会有一些关于URI使用的正交性...
或者有一个架构错误

3 个答案:

答案 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){ ... } } PGHOSTPGHOSTADDRPGPORTPGDATABASEPGUSER环境变量}}文档部分。

希望这会有所帮助。

答案 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可以是用于连接到数据库的数据库...