Най-добрият начинът е да направите крипто на клиента или сървъра на приложения, така че базата данни няма представа какви са ключовете и не може да декриптира данните. Ако клиентът/сървърът на приложения са на различен хост, още по-добре.
Ако вашата база данни криптира и декриптира данните вместо вас, тогава е уязвима ключовете да бъдат откраднати заедно с базата данни.
Ако използвате крипто функциите на pgcrypto в базата данни, можете да накарате приложението да изпрати ключа заедно с данните, което е поне донякъде полезно. Все пак рискува ключовете да бъдат разкрити в регистрационните файлове, ако полезен системен администратор включи агресивно регистриране на изявления или автоматично изхвърляне на планове, и в крайна сметка, ако ключовете отиват в машината за база данни, те са по-уязвими, отколкото ако не са . Нападателят, който поема контрола върху машината с база данни, може също да промени настройките на регистрационния файл, да замени двоичните файлове на postgresql или да подуши трафика, за да улови ключове и данни по този начин.
Ако сървърът на приложения и db са на една и съща машина и се управляват от една и съща роля(и), няма смисъл да се притеснявате за изолирането им и може да е разумно просто да използвате pgcrypto.
Така или иначе, не забравяйте да солите!