데이터베이스 체크섬 계산
데이터베이스 체크섬 계산 (Calculating a Database Checksum)
데이터베이스 체크섬을 계산하려면 모든 열, 모든 행, 모든 테이블에 bit_xor 같은 가환(commutative) 연산을 사용해요. 데이터가 조금이라도 바뀌면 체크섬이 달라지므로, 데이터베이스 내용이 일치하는지 빠르게 확인할 때 유용해요.
출처: 문서
본문
먼저 각 테이블에 대해 이것을 수행하는 테이블 매크로를 만들어요.
CREATE OR REPLACE MACRO table_checksum(table_name) AS TABLE
SELECT bit_xor(value) AS table_checksum
FROM (
UNPIVOT (
SELECT bit_xor(md5_number(COLUMNS(*)::VARCHAR))
FROM query_table(table_name)
)
ON columns(*)
);
이 매크로를 모든 테이블에 대해 호출해야 해요. CLI에서는 SQL 파일을 동적으로 생성해 할 수 있어요.
.mode list
.headers off
.once checksum_all_tables.sql
SELECT printf('CREATE OR REPLACE TABLE table_checksums (checksum UHUGEINT);')
UNION ALL
SELECT printf('INSERT INTO table_checksums FROM table_checksum(''%s'');', table_name)
FROM duckdb_tables()
WHERE NOT internal;
.mode duckbox
SQL 파일을 다시 읽고 데이터베이스의 체크섬을 계산해요.
.read checksum_all_tables.sql
SELECT bit_xor(checksum) AS database_checksum
FROM table_checksums;