Esiste un modo "semi-portatile" per ottenere md5() o sha1() di un'intera riga? (O meglio, di un intero gruppo di righe ordinate da tutti i loro campi, ad esempio order by 1,2,3,...,n
)? Sfortunatamente non tutti i DB sono PostgreSQL ... Devo occuparmi di almeno Microsoft SQL Server, Sybase e Oracle.Modo SQL per ottenere MD5 o SHA1 di un'intera riga
Idealmente, mi piacerebbe avere un aggregatore (lato server) e usarlo per rilevare le modifiche in gruppi di righe. Ad esempio, nelle tabelle che hanno una colonna timestamp, vorrei memorizzare una firma univoca per, diciamo, ogni mese. Poi ho potuto rilevare rapidamente i mesi che sono cambiati dalla mia ultima visita (sto specchiando certe tabelle a un server che esegue Greenplum) e li ricarico.
Ho esaminato alcune opzioni, ad es. checksum(*)
in tsql (horror: è molto soggetto alle collisioni, poiché è basato su un gruppo di XOR e valori a 32 bit) e hashbytes('MD5', field)
, ma quest'ultimo non può essere applicato a un'intera riga. E questo mi darebbe una soluzione solo per uno dei gusti SQL con cui ho a che fare.
Qualche idea? Anche solo per uno degli idiomi SQL sopra menzionati, sarebbe fantastico.