Pgcrypto decrypt und leere Feldinhalte

Hallo zusammen,

trotz Google komme ich nicht weiter.

Ich dachte, es sei eine gute Idee, einzelne Felder meiner Datenbank zu verschlüsseln. Beim testen mit pgp_sym_encrypt viel mir auf, eine Abfrage mit ‘like’ dauert nun viel zu lang.

Ich bin daher auf encrypt mit ‘bf’, also Blowfish umgestiegen, wo die Performanz wiedr stimmig ist.
Im Test hatte ich leider nur befüllte Feldinhalte, also kein ‘’. Beim befüllen schaue ich auch nicht, ob Inhalt da oder nicht, sonder schreibe alles mit

encrypt(’" + titel + “’, '” + key+ "’, ‘bf’), "

in die Tabelle.

Beim lesen knallt es dann bei allen leeren Feldinhalten:

cast (decrypt(titel::bytea, ‘" + key + "’, ‘bf’) as text) as titel

ERROR: FEHLER: decrypt error: Decryption failed

Gibt es da eine Lösung, die bei leeren Inhalten und ggf. auch bei NULL-Values greift?

Lieben Dank!

kennst Du coalesce()?

Nein, kannte ich nicht, lieben Dank! Ich versuche grade, das anzuwenden. Wo muss ich das denn hier:

cast (decrypt(titel::bytea, ‘" + key + "’, ‘bf’) as text) as titel

einbauen?

nun, dort wo NULL auftreten könnte

test=*# select NULL || 'text';
 ?column? 
----------
 
(1 row)

test=*# select coalesce(NULL,'') || 'text';
 ?column? 
----------
 text
(1 row)

test=*#

Vielen Dank für die Antwort, ich bin sonst auf der DB2 unterwegs, da kenne ich das als ifnull(xxx).

Ich habe mir eben noch einmal stichprobenartig die Daten angeschaut und bemerkt, einige Reihen haben tatsächlich kein Werte, der Fehler kam also nicht durch die ursprünglich leeren Felder, wie ich dachte, sondern durch jetzt leeren Felder (da dürften keine ohne Inhalt vom encrypt da sein), was ja auch nachvollziehbar ist.

Sorry, das Problem ist so nicht existent und lag wohl an den Daten und meiner ungenauen Fehleranalyse.