我在 Windows 上的 Postgres 9.5.4 上使用时态表 Postgres 扩展( http://pgxn.org/dist/temporal_tables/ )。这适用于大多数情况,但我遇到了数组列的奇怪问题。
我已经创建了一些最小的步骤来重现这一点,表的设置和临时表扩展如下:
CREATE EXTENSION IF NOT EXISTS temporal_tables;
DROP TABLE IF EXISTS test;
DROP TABLE IF EXISTS test_history;
CREATE TABLE test
(
id SERIAL PRIMARY KEY,
a integer,
directories text[],
sys_period tstzrange NOT NULL
);
CREATE TABLE test_history (LIKE test);
CREATE TRIGGER versioning_trigger BEFORE INSERT OR UPDATE OR DELETE ON test FOR EACH ROW EXECUTE PROCEDURE versioning('sys_period', 'test_history', true);
并在单独的事务中执行以下两个命令:
INSERT INTO test(a) VALUES (1);
UPDATE test SET a = 5 WHERE id = 1;
我收到以下错误:
错误:关系“test”的列“目录”是文本[]类型,但历史关系“test_history”的列“目录”是文本[]类型
这个错误对我来说是荒谬的,两列都具有相同的类型,错误甚至说明了这一点。这仅在表中存在 text[] 列时发生。没有必要写入该列,它只需要存在即可。如果我不创建数组列,则没有错误。
该扩展没有提及任何关于与数组不兼容的内容,我希望这种限制足够大,可以被提及。我想知道我设置表格的方式是否有任何问题,或者我是否遗漏了其他任何内容。两个 text[] 数组列的类型不同有什么根本原因吗?
知道究竟是什么导致了这个错误,我该如何摆脱它?
问题是 versioning.c:412:
当我改为 show
attndims
时,结果是:我发现问题出在
heap_openrv
(PostgreSQL 函数)没有正确填写由LIKE
. 我不知道如何修复它。但我找到了解决方案:在那之后:
这是一个长期存在的PostgreSQL 错误。