postgresql PostgresSQL脚本中的多个开头

dfty9e19  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(150)

我目前正在尝试有一个单一的sql脚本。我可以通过一个接一个地顺序执行所有脚本来达到我的最终结果。
目前,我的脚本创建了一堆表和存储过程,所有这些都封装在一个事务/开始和End中。

DO $$
BEGIN

    CREATE TABLE IF NOT EXISTS licenses (
        license_id smallint NOT NULL,
        name varchar(25) NOT NULL,
        PRIMARY KEY (license_id)
    );
    ..... create lots of tables ....

END$$;

现在,我尝试向该脚本添加两个存储过程,但由于存储过程包含开始,而这在现有事务中不起作用,所以失败了。
我可以把存储过程放在第一个事务的下面,但是新的存储过程应该只有在创建表的前一个事务提交后才执行。

yqkkidmi

yqkkidmi1#

您使用的开始不是SQL command BEGIN,而是PL/pgSQL block structure
要启动事务,请坚持使用SQL:

begin transaction;

CREATE TABLE IF NOT EXISTS licenses (
   license_id smallint NOT NULL,
   name varchar(25) NOT NULL,
   PRIMARY KEY (license_id)
);

..... create lots of tables ....

create procedure foo() 
as 
$body$
begin 
  ...
end;
$body$
language plpgsql;

create table ...;

commit;

begin transaction;
... create other tables and procedures
commit;

相关问题