Postgresql pgp多行解密

时间:2015-11-14 13:07:06

标签: sql postgresql encryption pgp

我有问题。 'message'表有senderId,receiverId,id和text。文本是bytea意味着它是加密的。我的问题在于我正在尝试创建一个过程,该过程将userId,他的私钥和密钥密码作为参数,并将所有已经解密的消息返回给他。到目前为止,我有这个。

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;

由于显而易见的原因,只返回一行。您对如何实现这一点有什么建议吗? 此致

1 个答案:

答案 0 :(得分:1)

您需要将函数定义为:

RETURNS SETOF TEXT

然后逐行返回消息:

RETURN NEXT msg;