【问题标题】:CREATE DATABASE cannot run inside a transaction blockCREATE DATABASE 不能在事务块内运行
【发布时间】:2014-12-16 10:42:51
【问题描述】:

我正在使用 AWS 服务器 + PostgreSQL。当我执行创建数据库的查询时出现错误:

CREATE DATABASE cannot run inside a transaction block

我正在使用 Linux Ubuntu 12.04 LTS。

我该如何解决这个问题?

【问题讨论】:

  • 查询本身将对问题非常有用。仅从消息中,我只能假设您尝试在事务中创建数据库。如果是这样,您的数据库创建逻辑上属于事务之前。
  • 嗨,我对 postgraSQL 很陌生。我是第一次从 postgraSQL 开始。我搜索了相同的错误,但最近两天我遇到了这个问题。你的评论我很难理解。
  • 我该如何解决这个问题?” - 打开开启自动提交。具体操作方式取决于您使用的 SQL 客户端。
  • 嗨@a_horse_with_no_name 感谢您的宝贵意见。我必须打开自动提交并且创建命令正在工作。

标签: database postgresql


【解决方案1】:

我在 PostgreSQL 中使用了开启自动提交功能,它对我有用。

这是开启自动提交的查询

SET AUTOCOMMIT = ON

注意这仅适用于 PostgreSQL 9.4 及以下版本

【讨论】:

【解决方案2】:

注意,对于 postgres 9.5+,您必须使用:

psql -c '\set AUTOCOMMIT on'

但我猜,您真正想要做的是销毁数据库并在单个命令中重新创建它。给你:

printf '\set AUTOCOMMIT on\ndrop database <your_db_here>; create database <your_db_here>; ' |  psql postgres

【讨论】:

    【解决方案3】:

    如果您在创建表块中添加了注释行,也会发生这种情况

    问题代码:

    CREATE TABLE users (
        user_id SERIAL PRIMARY KEY,
        first_name VARCHAR(30),
        last_name VARCHAR(30) NOT NULL,
        date_of_birth DATE
    -- managers INT FOREIGN KEY,
    -- employees INT FOREIGN KEY,
    -- companies INT FOREIGN KEY
    );
    
    
    

    解决方案:

    CREATE TABLE users (
        user_id SERIAL PRIMARY KEY,
        first_name VARCHAR(30),
        last_name VARCHAR(30) NOT NULL,
        date_of_birth DATE
    );
    
    -- managers INT FOREIGN KEY,
    -- employees INT FOREIGN KEY,
    -- companies INT FOREIGN KEY
    

    【讨论】:

      【解决方案4】:

      在 Postgres SQL 14.1 pgAdmin 查询工具中,我在使用其他查询运行创建数据库查询时看到了同样的错误。自行运行创建数据库查询成功完成。

      【讨论】:

        猜你喜欢
        • 2021-05-31
        • 2020-12-03
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-08
        • 2020-02-18
        相关资源
        最近更新 更多