MonetDB - 表添加到合并表多次,无法删除或删除它

问题描述:

我有一个具有大约6.2亿行数据的MonetDB合并表,我们称之为merge_table。它有14个成员表格,每个表格包含一些月度数据(例如2017年1月的data1701)。处理将数据加载到数据库和添加/删除成员表的Java程序以某种方式设法多次将相同的表添加到合并表中。我的问题是,现在我无法从合并表中删除这些复制的表,即使MonetDB说,手术很成功:MonetDB - 表添加到合并表多次,无法删除或删除它

ALTER TABLE myschema.merge_table DROP TABLE data1708; 

操作成功(0.608ms)

然后,当我尝试删除该表:

DROP TABLE myschema.data1708; 

DROP TABLE:无法删除表data1708(有数据库目标W这取决于它)

当然,当我列出的成员merge_tabledata1708仍然存在。

是否有其他方法可以用来删除这些重复项?

编辑:

MonetDB版本是23年11月25日(monetdbd [21491] 1.7(Dec​​2016-SP5))。 JDBC版本是2.19。

多次运行DROP TABLE命令会得到相同的结果。尝试添加任何表中再次不起作用,所以它按预期工作不JDBC:

ALTER TABLE myschema.merge_table ADD TABLE data1708; 

ALTER TABLE:表“myschema.data1708”已经是MERGE表的一部分“myschema.merge_table “

我的合并表的编号是9020,于是我就建议的查询与该休息:

SELECT * FROM sys.dependencies JOIN sys.dependency_types ON depend_type = dependency_type_id WHERE depend_id = 9020; +-------+-----------+-------------+--------------------+----------------------+ | id | depend_id | depend_type | dependency_type_id | dependency_type_name | +=======+===========+=============+====================+======================+ | 9668 | 9020 | 2 | 2 | TABLE | | 9722 | 9020 | 2 | 2 | TABLE | | 9776 | 9020 | 2 | 2 | TABLE | | 9830 | 9020 | 2 | 2 | TABLE | | 9884 | 9020 | 2 | 2 | TABLE | | 9938 | 9020 | 2 | 2 | TABLE | | 13891 | 9020 | 2 | 2 | TABLE | | 13945 | 9020 | 2 | 2 | TABLE | | 13999 | 9020 | 2 | 2 | TABLE | | 14053 | 9020 | 2 | 2 | TABLE | | 14107 | 9020 | 2 | 2 | TABLE | | 14161 | 9020 | 2 | 2 | TABLE | | 14215 | 9020 | 2 | 2 | TABLE | | 14269 | 9020 | 2 | 2 | TABLE | +-------+-----------+-------------+--------------------+----------------------+

SELECT * FROM sys.objects WHERE id = 9020; +------+------------+------+ | id | name | nr | +======+============+======+ | 9020 | data1607 | 1 | | 9020 | data1608 | 2 | | 9020 | data1609 | 3 | | 9020 | data1610 | 4 | | 9020 | data1611 | 5 | | 9020 | data1612 | 6 | | 9020 | data1701 | 7 | | 9020 | data1702 | 8 | | 9020 | data1703 | 9 | | 9020 | data1704 | 10 | | 9020 | data1705 | 11 | | 9020 | data1706 | 12 | | 9020 | data1707 | 13 | | 9020 | data1707 | 12 | | 9020 | data1708 | 13 | | 9020 | data1707 | 12 | | 9020 | data1708 | 13 | +------+------------+------+

首先,为了完整,您使用的是哪个版本的MonetDB和 哪个版本的JDBC驱动程序?此外,我认为运行

ALTER TABLE myschema.merge_table DROP TABLE data1708; 

第二次没有让问题消失?

我想 - 无需JDBC - 下面的脚本:

DROP SCHEMA IF EXISTS demo; 
CREATE SCHEMA demo; 
SET SCHEMA demo; 

CREATE TABLE template (i INT, j INT); 

CREATE TABLE foo (LIKE template); 
INSERT INTO foo VALUES (1,10), (2,20); 

CREATE TABLE bar (LIKE template); 
INSERT INTO bar VALUES (3,30); 

CREATE MERGE TABLE merged (LIKE template); 
ALTER TABLE merged ADD TABLE foo; 
ALTER TABLE merged ADD TABLE bar; 
ALTER TABLE merged ADD TABLE bar; 

ALTER TABLE merged DROP TABLE bar; 

DROP TABLE bar; 

SELECT * FROM merged; 

这正常工作。也就是说,第二个'ALTER ADD bar'产生一个 错误消息,并且DROP TABLE栏成功。你可以试试 类似的东西,但使用玩具Java程序?

另外,在这样做之前,你可以窥视'sys'模式吗?在 特别

SELECT * FROM sys.tables WHERE name = 'merge_table'; 

弄清楚合并表的ID。

SELECT * 
FROM sys.dependencies JOIN sys.dependency_types 
ON depend_type = dependency_type_id 
WHERE depend_id = <merge-table-id>; 

SELECT * FROM sys.objects WHERE id = <merge-table-id>; 

注意,试图修改这些表像预期的那样“修复”的事情是行不通的。我只是好奇他们目前的状态。

Joeri

+0

嘿Joeri, 我已经编辑与查询结果我的问题。不幸的是,Java程序不是我的,但它现在正在修正,不包括某些假设。尽管问题可能出现在JDBC驱动程序中。 – bem13

+0

您的输出确实显示了三次data1707和两次data1708。 我尝试使用JDBC 2.25和MonetDB版本 Dec2016-SP5和Jul2017但未能重现此行为。 因此,JDBC可能不是问题所在。 恐怕我没有进一步的建议了解这个 是怎么发生的。你可以做的最好的可能是重新加载数据库,并希望对你的应用程序的各种改进足以让 不会再次遇到这个问题。如果您后来发现如何欺骗 MonetDB多次添加表,请告诉我们,以便我们 可以修复它。 –

+0

没问题,谢谢你的帮助。我们从转储中重新创建了数据库(和合并表),将程序修改了一些并更新为最新的MonetDB版本。如果我们弄清楚什么,我一定会通过邮件列表让你们知道。 – bem13