gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:37:10 25 4
gpt4 key购买 nike

我想编写脚本来使用 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;

表A.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 ...

关于java - PSQL:当前事务被中止,命令被忽略直到事务 block 结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38791238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com