데이터베이스 체크섬 계산

데이터베이스 체크섬 계산 (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;

더 알아보기 (Learn more)