我正在使用 AWS 服务器和 PostgreSQL。当我执行创建数据库的查询时,出现错误:
CREATE DATABASE cannot run inside a transaction block
我正在使用Linux Ubuntu 12.04 LTS。
我该如何解决这个问题?
我正在使用 AWS 服务器和 PostgreSQL。当我执行创建数据库的查询时,出现错误:
CREATE DATABASE cannot run inside a transaction block
我正在使用Linux Ubuntu 12.04 LTS。
我该如何解决这个问题?
我已经在PostgreSQL中使用了自动提交(autocommit)并且它对我有效。
下面是打开自动提交的查询语句:
SET AUTOCOMMIT = ON
请注意,这仅适用于PostgreSQL 9.4及以下版本
注意,对于PostgreSQL 9.5+,您需要使用:
psql -c '\set AUTOCOMMIT on'
但是我猜想,您真正想做的是在一个命令中销毁数据库并重新创建它。以下是您需要的命令:
printf '\set AUTOCOMMIT on\ndrop database <your_db_here>; create database <your_db_here>; ' | psql postgres
使用psql,您还可以通过使用多个--command
参数在一个命令中运行drop和create数据库:
psql postgres -c "drop database if exists <your_db_here>;" -c "create database <your_db_here>;"
如果在 create table 块内部有注释行,也可能会出现这种情况。
问题代码:
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
with psycopg2.connect(
dbname=database, host=server, port=port, user=user, password=password
) as connection:
connection.autocommit = True
connection = psycopg2.connect(
dbname=database, host=server, port=port, user=user, password=password
)
connection.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
我使用了查询工具
并得到了您的错误信息。为了解决这个问题,我打开了PSQL工具
,然后创建了我的数据库。
sudo su - postgres
psql -d postgres -U postgres
create database dbName;