为啥我不能使用 node-postgres 从数据库中删除?

Posted

技术标签:

【中文标题】为啥我不能使用 node-postgres 从数据库中删除?【英文标题】:Why can't I delete from db using node-postgres?为什么我不能使用 node-postgres 从数据库中删除? 【发布时间】:2015-05-03 12:28:13 【问题描述】:

我需要对参数化查询做些什么特别的事情吗?

以下似乎成功了(我正在使用承诺化的client.query 见结尾),

console.log('cancel for', data);
var cancelInviteQuery = 'delete from friendship where user_1=$1 and user_2_canonical=$2';
return query(cancelInviteQuery, [data.id, data.friend])
  .then(function (results) 
    console.log('ran delete frienship', results);
  )
  .catch(function (error) 
    console.error('failed to drop friendship', error);
  );

因为我得到了输出:

cancel for "id":3,"friend":"m"
ran delete frienship []

但随后对数据库的以下查询显示该记录仍然存在

select * from friendship;
 id | user_1 | user_2 | user_2_canonical | confirmed | ignored 
----+--------+--------+------------------+-----------+---------
  8 |      3 |      9 | m                | f         | f

然后当我直接针对数据库进行以下查询时(使用 psql 客户端)

delete from friendship where user_1=3 and user_2_canonical='m'

我的query 函数(node-postgres 的client.query 的包装器):

function query(sql, params) 
  var promise = new RSVP.Promise(function (resolve, reject) 
    pg.connect(CONNECTIONSTRING, function (error, client, done) 
      if (error)  reject(error); return; 

      client.query(sql, params, function (error, result) 
        done(); // Greedy close.
        if (error) 
          reject(error);
          return;
        
        else if (result.hasOwnProperty('rows')) 
          resolve(result.rows);
         else  resolve(result.rows); 
      );
    );
  );
  return promise;

【问题讨论】:

您的 data 变量有问题。在console.log 中显示的是"friend":"m",但您希望它是"friend":"mike" 对不起@victorkohl 这是一个草率的粘贴。 你解决了这个问题吗?如果不发送更多信息 我还没有解决它,但我仍然不知道提供什么。 【参考方案1】:

试试这个

var cancelInviteQuery = 'delete from friendship where user_1 IN ($1) and user_2_canonical IN ($2)';

【讨论】:

以上是关于为啥我不能使用 node-postgres 从数据库中删除?的主要内容,如果未能解决你的问题,请参考以下文章

使用 node-postgres 在 postgres 中存储文件

node-postgres 创建数据库

具有大量查询的 node-postgres

将 Async/Await 与 node-postgres 一起使用

pg(node-postgres)是不是自动清理数据

如何使用 node-postgres 进行批量插入