繁体   English   中英

如何在PostgreSQL +的表的列中替换值?

[英]How to replace value in column of table on PostgreSQL+?

我使用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;
}

但是结果就像加密之前一样。 我有什么问题,如何将值替换为列中的其他值?

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

有两种方法。

  1. 一次选择并更新一行。 优点是您可以更轻松地管理交易规模。 换句话说,在这种情况下,您一次更新一个值,然后在客户端中进行加密。

  2. 您可以使用pg_crypto类的pg_crypto ,它是对数据进行加密的标准扩展,并使用单个更新查询来执行此操作。 请注意,这可能需要更长的开放式写入事务,限制了自动清理可以清除的内容。 此外,还需要向查询提供键,因此您可以在日志中披露键。

这些方法之间存在巨大的权衡。 在PostgreSQL中,通常会进行客户端管理的加密,因为您在后端遇到了关键的公开和管理问题。 但是,存在其他方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM