【问题标题】:How to replace value in column of table on PostgreSQL+?如何替换 PostgreSQL 表列中的值?
【发布时间】:2017-01-26 21:14:06
【问题描述】:

我使用libpqxx 连接到 C++ 中的 PostgreSQL 数据库。我想加密一列表并将其替换为当前列。我这样写:

int num;
cout << "Select Your COLUMN Number For Encryption: ";
cin >> num;

/* Create SQL statement */            
sql = "SELECT * from " + tbName;

/* Execute SQL query */
result R3( N.exec( sql ));

/* List down all the records */
for (result::const_iterator c = R3.begin(); c != R3.end(); ++c) {
    c[num].as<string>() = encnum->encryptionData(3,5,c[num].as<int>());
    cout << "Encryption = " << c[num].as<string>() << endl;
}

但结果和加密前一样。我怎么了?如何将值替换为列中的其他值?

【问题讨论】:

  • 如果您尝试更新表列,那么您应该执行update 语句。
  • 你能告诉我吗?我尝试使用更新来获取一个值,但我想更新整个列。 @karastojko
  • 你试过有更新语句的Brief example吗?
  • 那么,当我想加密 ID 列时怎么样?@karastojko

标签: c++ database postgresql libpqxx


【解决方案1】:

所以我对您的问题的理解是您有一列文本或二进制数据,并且您希望将该列中的所有行更新为表示文件当前内容的加密版本的密文。

有两种方法。

  1. 一次选择并更新一行。优点是您可以更轻松地管理事务大小。换句话说,在这种情况下,您一次更新一个值并在客户端进行加密。

  2. 您可以使用像 pg_crypto 这样的标准扩展来加密数据并使用单个更新查询来执行此操作。请注意,这可能需要更长时间的打开写入事务限制 autovacuum 可以清理的内容。还需要向查询提供密钥,因此您可以在日志中披露密钥。

这些方法之间存在巨大的权衡。在 PostgreSQL 中,由于您在后端遇到的密钥泄露和管理问题,通常会完成客户端管理的加密。然而,存在其他方法。

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 2022-11-10
    • 1970-01-01
    • 2020-04-21
    • 2019-07-28
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多