【问题标题】:postgresql nextval question on sequences关于序列的postgresql nextval问题
【发布时间】:2011-01-12 10:41:29
【问题描述】:

我正在尝试在 PHP 中使用 postgresql 'nextval'。如何填写第三行的括号,以便将 TXN_ID 替换为 nextval('schemadb.audit_txn_seq') 的值?

$DB->query("SELECT nextval('schemadb.audit_txn_seq')");
$DB->query('SET CONSTRAINTS ALL DEFERRED');
$DB->query('SELECT schemadb.undo_transaction(TXN_ID)');

谢谢!

【问题讨论】:

    标签: php postgresql sequence nextval


    【解决方案1】:

    试试:

    $DB->query("SELECT nextval('schemadb.audit_txn_seq')");
    $DB->query('SET CONSTRAINTS ALL DEFERRED');
    $DB->query("SELECT schemadb.undo_transaction( currval('schemadb.audit_txn_seq') )");
    

    【讨论】:

    • 这似乎不起作用。无论如何要存储“$DB->query("SELECT nextval('schemadb.audit_txn_seq')");”的结果到 PHP 变量中?
    • 让我们退后一步。你到底想做什么?是不是只想获取序列下一个值的ID?
    • 我想获取序列中currval的ID。您之前发布的内容不起作用,所以我想看看我是否可以将序列的 currval 存储在 php 变量中。谢谢!
    【解决方案2】:

    您没有告诉我们$DB 变量是什么。我猜你正在使用 PDO。

    “无论如何要将查询结果存储到 php 变量中”的问题是一种初学者问题,the manual 很容易回答。

    你必须明白,(从 PHP 的角度来看)两者没有区别

    SELECT nextval('schemadb.audit_txn_seq')
    

    SELECT xcolumn FROM xtable LIMIT 1
    

    如果你想从任何查询中获取数据值,你总是以相同的标准方式进行:

    1. 查询
    2. 执行
    3. 获取

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      我不确定与 SET CONSTRAINTS ALL DEFERRED 的交互,但您是否尝试过这样做:

      SELECT schemadb.undo_transaction(nextval('schemadb.audit_txn_seq'))
      

      现在的问题是“undo_transaction”返回什么?如果它在成功完成后返回事务 ID,那么你就可以开始了!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-07
        • 1970-01-01
        • 2022-10-07
        • 2011-11-21
        相关资源
        最近更新 更多