Tôi muốn một cách khá hiệu quả để ngưng tụ toàn bộ bảng thành giá trị băm.Làm cách nào tôi có thể nhận được băm của toàn bộ bảng trong postgresql?
Tôi có một số công cụ tạo toàn bộ bảng dữ liệu, sau đó có thể được sử dụng để tạo thêm các bảng, v.v. Tôi đang cố gắng để thực hiện một hệ thống xây dựng đơn giản để phối hợp chạy xây dựng và tránh lặp lại công việc. Tôi muốn có thể ghi lại các băm của các bảng đầu vào để sau này tôi có thể kiểm tra xem chúng có thay đổi hay không. Việc xây dựng một bảng chỉ mất vài phút hoặc vài giờ, do đó, chi tiêu vài giây xây dựng băm là chấp nhận được. Một hack Tôi đã sử dụng là để chỉ đường ống đầu ra của pg_dump để md5sum, nhưng điều đó đòi hỏi phải chuyển toàn bộ bãi chứa trên mạng để băm nó trên hộp địa phương. Quay lại đầu trang |||| Lý tưởng nhất là tôi muốn sản xuất băm trên máy chủ cơ sở dữ liệu.
Finding the hash value of a row in postgresql cung cấp cho tôi cách tính giá trị băm cho một hàng tại một thời điểm, sau đó có thể được kết hợp bằng cách nào đó.
Mọi mẹo sẽ được đánh giá cao.
Chỉnh sửa để đăng những gì tôi đã kết thúc với: Câu trả lời của tinychen không làm việc trực tiếp cho tôi, bởi vì tôi không thể sử dụng 'plpgsql' rõ ràng. Khi tôi thực hiện hàm trong SQL thay vào đó, nó hoạt động, nhưng lại không hiệu quả đối với các bảng lớn. Vì vậy, thay vì ghép tất cả các băm hàng và sau đó băm, tôi chuyển sang sử dụng một "băm cán", trong đó băm trước được nối với biểu diễn văn bản của một hàng và sau đó được băm để tạo ra băm tiếp theo. Điều này tốt hơn nhiều; dường như chạy md5 trên chuỗi ngắn hàng triệu lần thêm là tốt hơn so với nối chuỗi ngắn hàng triệu lần.
create function zz_concat(text, text) returns text as
'select md5($1 || $2);' language 'sql';
create aggregate zz_hashagg(text) (
sfunc = zz_concat,
stype = text,
initcond = '');
Tôi không biết cách nào để làm điều này. Bản năng đầu tiên của tôi là đăng nhập tạo bảng và so sánh dấu thời gian. – mikerobi
Tôi cho rằng bạn không thể chạy lệnh pg_dump trên máy chủ, phải không? –
@Joey: +1. rất thực dụng, có lẽ là nhanh nhất. Biến nó thành câu trả lời. – Thilo