A minor correction by casting the row a little:
create table t (
a text
b text
hashid varchar not NULL GENERATED ALWAYS AS (sha256(row(a,b)::text::bytea)) 
stored
)

Sent with [ProtonMail](https://protonmail.com/) Secure Email.

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Tuesday, January 18th, 2022 at 14:34, Klaudie Willis 
<klaudie.wil...@protonmail.com> wrote:

> Hashing a row or set of columns is useful in some circumstances where you 
> need to compare the row with for instance incoming data. This is most 
> relevant when you do not control the source data yourself, or else you would 
> usually solve it by other means.
>
> Still, It would be great if you could do it like this:
> create table t (
> a text
> b text
> hashid varchar not NULL GENERATED ALWAYS AS (sha256(row(a,b))) stored
> )
>
> But, row is not immutable so you are not allowed to do this. Instead, you 
> need to start concatenating columns, but if you want to do that correctly, 
> you also need separator symbols between columns, which then needs to be 
> escaped in the individual column values. And then you have to handle NULL 
> properly as well. The first example handles all of this, if only row was 
> immutable.
>
> Any better way of doing this? Can I create my own row2() constructor that IS 
> immutable in a simple way?
>
> best regards
>
> Klaudie

Reply via email to