Postgresql pgp多行解密
Postgresql pgp multiple row decryption
我有问题。 'message' table 有一个 senderId、receiverId、id 和 text。文本在 bytea 中,意味着它是加密的。我这里的问题是,我正在尝试创建一个程序,它将 usersId、他的私钥和密钥密码作为参数,并且 return 他的所有消息都已解密。到目前为止我有这个。
CREATE OR REPLACE FUNCTION readAllUserMessages( userId Users.id%TYPE,
privateKey varchar(3000), privateKeyPassword text)
RETURNS TEXT AS $$
DECLARE
msg text;
encryptedMsg Messages.text%TYPE;
cur CURSOR FOR SELECT * FROM messages WHERE receiverId = userId;
BEGIN
FOR row IN cur LOOP
encryptedMsg := row.text;
msg := pgp_pub_decrypt(encryptedMsg, dearmor(privateKey),privateKeyPassword);
RETURN msg;
END LOOP;
END;
$$ LANGUAGE plpgsql;
由于显而易见的原因,return只有一行。您对如何实现这一点有什么建议吗?
此致
您需要将函数定义为:
RETURNS SETOF TEXT
然后 return 一行一行的消息:
RETURN NEXT msg;
我有问题。 'message' table 有一个 senderId、receiverId、id 和 text。文本在 bytea 中,意味着它是加密的。我这里的问题是,我正在尝试创建一个程序,它将 usersId、他的私钥和密钥密码作为参数,并且 return 他的所有消息都已解密。到目前为止我有这个。
CREATE OR REPLACE FUNCTION readAllUserMessages( userId Users.id%TYPE,
privateKey varchar(3000), privateKeyPassword text)
RETURNS TEXT AS $$
DECLARE
msg text;
encryptedMsg Messages.text%TYPE;
cur CURSOR FOR SELECT * FROM messages WHERE receiverId = userId;
BEGIN
FOR row IN cur LOOP
encryptedMsg := row.text;
msg := pgp_pub_decrypt(encryptedMsg, dearmor(privateKey),privateKeyPassword);
RETURN msg;
END LOOP;
END;
$$ LANGUAGE plpgsql;
由于显而易见的原因,return只有一行。您对如何实现这一点有什么建议吗? 此致
您需要将函数定义为:
RETURNS SETOF TEXT
然后 return 一行一行的消息:
RETURN NEXT msg;