【问题标题】:How to indicate in postgreSQL command in which database to execute a script? (simmilar to SQL Server "use" command)如何在 postgreSQL 命令中指示要在哪个数据库中执行脚本? (类似于 SQL Server 的“使用”命令)
【发布时间】:2011-04-23 23:22:15
【问题描述】:

我有以下问题,我需要在新版本推出之前放入一个脚本,该脚本将在 PostgreSQL 中启用 pgAgent 的 SQL 代码。但是,这段代码应该在维护数据库(postgres)上运行,而我们运行脚本文件的数据库是另一个数据库。

我记得在 SQL Server 中有一个命令“use”,因此您可以执行以下操作:

use foo

-- some code

use bar 

-- more code

PostgreSQL 中有类似的东西吗?

【问题讨论】:

标签: sql postgresql


【解决方案1】:

您可以在文件中输入如下内容:

\c first_db_name
select * from t; --- your sql
\c second_db_name
select * from t; --- your sql
...

【讨论】:

    【解决方案2】:

    您是否通过psql 命令传递这些命令?如果是这样,\c databasename 就是你想要的。

    psql documentation

    【讨论】:

    • 其实输入的是一个文本文件,经过数据库处理
    • 它是如何“被数据库处理”的?您必须使用 some Postgres 客户端连接到它。哪一个?
    • 它是一个执行文本文件的客户端,它通过 ODBC 驱动程序连接到数据库。为了更容易想象我在 pgAdmin 客户端上,我想运行一个脚本,该脚本将在两个不同的数据库中进行更新。
    • JDBC 无法识别 \c 所以我必须连接到我想要连接的特定 jdbc URL。并执行 SQL 文件。
    • 如果您使用的是 JDBC,那么您没有使用 psql。 \c 不是 SQL - 它是一个 psql 命令。 Postgres 数据库连接不能即时切换到不同的数据库。
    【解决方案3】:

    您不能以这种方式在 Postgres 中切换数据库。您实际上必须重新连接到另一个数据库。

    【讨论】:

    • 有没有办法从脚本中做到这一点,还是我必须从连接到数据库的应用程序中做到这一点?
    • 来自应用程序。如果您完成了第一个数据库连接,只需将其删除,否则您需要建立两个连接。不久前我曾问过 pg 开发人员同样的问题。我不记得他们这样做的原因。但是他们说,尽管pgadmin和psql看起来只是在切换数据库,但它们实际上是在建立新的连接。
    【解决方案4】:

    PostgreSQL 没有 USE 命令。您很可能会使用带有 --dbname 选项的 psql 来完成此操作, --dbname 将数据库名称作为参数。有关可以传入的其他选项的详细信息,请参阅此链接,您还需要查看 --file 选项。 http://www.postgresql.org/docs/9.0/interactive/app-psql.html

    【讨论】:

      【解决方案5】:

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        相关资源
        最近更新 更多