【问题标题】:How to execute two transactions concurrently in Postgresql?如何在 Postgresql 中同时执行两个事务?
【发布时间】:2015-05-23 15:06:48
【问题描述】:

我想在 Postgresql 中同时执行两个事务,这就是我所拥有的

--The first transaction should modify the age of Paul
BEGIN;
DECLARE newage INTEGER;
--the original age of Paul is 32
newage := Select age FROM COMPANY WHERE name = Paul;
newage := newage+10;
update company set age := Sage where name = Paul;
commit;


--The second Transaction shows all information about Paul including his age
Begin
select * from company where name = 'Paul';
commit;

这两部分都是在同一个 SQL 编辑器中编写的。我的第一个问题是它没有编译,我得到了消息

ERROR:  syntax error at or near "INTEGER"
LINE 2: DECLARE newage INTEGER;

如何改进我的代码来执行它?谁能帮我?谢谢!

【问题讨论】:

  • 看起来您正在混合使用 plpgsql 和 sql。您的第一个事务不是有效的 SQL,但它看起来像 plpgsql。但它只是看起来像,它也不是有效的plpgsql。那你在找什么?
  • @FrankHeikens 我正在使用 PgAdmin,我想同时运行 2 个事务。除了声明变量的语法失败。如果我在同一个 SQL 编辑器窗口上执行它们是否正确?我的意思是“开始;……提交;”对于第 1 笔交易和“开始;...提交;”第二次交易?

标签: postgresql concurrency transactions


【解决方案1】:
  1. 在 PostgreSQL 中你不能在 SQL 中声明变量,但你可以在 pl/pgsql 中声明
  2. DECLARE 关键字创建的是游标,而不是变量。
  3. 使用SELECT INTO 将值设置为newage
  4. 使用DO 执行pl/pgsql。它将在单个事务中执行。

所以查询结果如下:

DO $$ DECLARE
    newage INTEGER;
BEGIN
    SELECT age INTO newage FROM companey WHERE name = 'Paul';
    newage := newage+10;
    UPDATE company SET age = newage where name = 'Paul';
END $$:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多