繁体   English   中英

PSQL:当前事务中止,命令被忽略,直到事务块结束

[英]PSQL: current transaction is aborted, commands ignored until end of transaction block

我想编写用于使用PostgreSQL中的表创建数据库的脚本。 我创建了deploy_db.bat

@echo off
"C:\Program Files\PostgreSQL\9.4\bin\psql.exe" -h localhost -p 5433 -U postgres -d postgres -f run_main.sql
pause

我的run_main.sql:

BEGIN;
\i create_db.sql
\i tableA.sql
COMMIT;

create_db.sql:

CREATE DATABASE test;

DROP SCHEMA IF EXISTS test CASCADE;

CREATE SCHEMA test
  AUTHORIZATION postgres;

tableA.sql:

CREATE TABLE test.tableA(
  id serial PRIMARY KEY,
  name text,
  age INTEGER
);

因此,我运行deploy_db.bat并看到:

BEGIN
psql:create_db.sql:1: ERROR: CREATE DATABASE cannot run inside a transaction block
psql:create_db.sql:3: ERROR: current transaction is aborted, commands ignored until end of transaction block
ROLLBACK

但为什么? 怎么解决呢?

您发出了开始事务的BEGIN ,然后发出了CREATE DATABASE ,它产生了错误消息,因为您在事务内部运行了它。

您可以将CREATE DATABASE语句移到BEGIN之前,这将消除错误消息。

但是,阅读您的SQL脚本后,我怀疑您想在新创建的数据库中创建新的架构和表,而脚本不会发生这种情况。 而是将在数据库postgres创建模式和表。

要更改此设置,您的脚本应如下所示:

CREATE DATABASE test;

-- connect to that database
\connect test

-- now create your schema and your table
CREATE SCHEMA ...
CREATE TABLE ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM