簡體   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