postgresql - 错误 : cannot insert multiple commands into a prepared statement

标签 postgresql

我正在尝试将一行从一张表移动到另一张表。

问题是,如果我将两个查询放在一起,我会得到“错误:无法将多个命令插入准备好的语句”。我能做什么?

exports.deletePost = function(id) {
    return db.query(`INSERT INTO deletedjobs
    SELECT *
    FROM jobs
    WHERE id = $1;

    DELETE FROM jobs WHERE id = $1;`, [id]).then(results => {
        console.log("succesfull transfer");
        return results.rows[0];
    });
};

最佳答案

编辑:关注Docs v7.0.0,我发现 db.multi 可以执行多查询字符串,你可以试试这个:

db.multi(`INSERT INTO deletedjobs
    SELECT *
    FROM jobs
    WHERE id = $1;DELETE FROM jobs WHERE id = $1`, [id])

我认为更好的解决方案是将查询包装到一个同时用于插入-删除的函数中,如下所示:

CREATE FUNCTION moveJob(id character varying) RETURNs void AS
$BODY$
BEGIN
    INSERT INTO deletedjobs
    SELECT *
    FROM jobs
    WHERE id = id;

    DELETE FROM jobs WHERE id = id;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER
  COST 100;

并在你的 js 中调用它作为 postgresql 函数:

db.any('select moveJob($1)', [id]);

关于postgresql - 错误 : cannot insert multiple commands into a prepared statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57221749/

相关文章:

sql - 尝试通过 Offer_id 检索第一行分区

php - Laravel Backpack - 请求未知数据库类型 tsvector

ruby-on-rails - 如何在复杂的 Rails has_many 作用域中进行外部连接?

postgresql - 根据时间字段将 postgres 记录分成组

postgresql - 在事务中创建数据库

r - 通过 Shiny app 将信息写入 PostgreSQL 数据库

hibernate - org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 名为 «name» 的列不存在于此 «ResultSet» Hibernate with PostgreSQL JDBC

postgresql - 将 9.3 迁移到 9.4 postgres 时选择哪一个(pg_basebackup 或 pg_dumpall)

ruby-on-rails - 使用 Rails 4 错误在 Heroku 上创建 postgres 数据库

postgresql - 根据 postgres 中的条件进行部分更新