我正在尝试复制拦截插入并创建每条记录的哈希值,其中包括前一条记录的哈希值,我可以在SQL服务器上成功地使用而不是插入触发器,不幸的是我找不到任何内容Postgres文档说明我如何处理插入的记录集到表中,以便在最终提交集合插入之前计算这个转发的哈希到每个记录上。
我正在尝试创建一个简单的区块链,以便能够验证应该是仅附加数据库的内容是否未被篡改,因此我需要在Postgres中复制以下INSTEAD OF INSERT触发器:
DECLARE @tbl TABLE(rid INT, f INT, h VARBINARY(1000) null)
INSERT INTO @tbl(rid, f)
SELECT
ROW_NUMBER() OVER( ORDER BY ... ASC)
, id
FROM inserted
DECLARE @max INT, @curRecord INT, @pHash VARBINARY(1000)
SELECT @max = MAX(rid), @curRecord = 1 from @tbl
SELECT TOP 1 @pHash = hash FROM dbo.trx ORDER BY id DESC
IF @pHash IS NULL
BEGIN
SET @pHash = CONVERT(VARBINARY(1000), 0)
END
DECLARE @cHash VARBINARY(1000)
WHILE(@curRecord <= @max)
BEGIN
SELECT @cHash = HASHBYTES( 'SHA1', CONVERT(NVARCHAR(MAX),
CONVERT(VARCHAR,f) +
CONVERT(varchar(1000),@pHash, 1)))
FROM @tbl WHERE rid = @curRecord
UPDATE @tbl SET h = @cHash FROM @tbl WHERE rid = @curRecord
SET @curRecord = @curRecord + 1
SET @pHash = @cHash
SET @cHash = NULL
END
INSERT INTO dbo.trx(id, hash)
SELECT f,h FROM @tbl ORDER BY rid ASC