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

时间:2017-07-25 14:24:55

标签: sql database monetdb

我有一个MonetDB合并表,里面有大约6.2亿行数据,我们称之为merge_table。它有14个成员表,每个表包含一些月度数据(例如2017年1月的data1701)。处理数据到数据库并添加/删除成员表的Java程序设法将多个相同的表添加到合并表。我的问题是,现在我无法从合并表中删除这些重复的表,即使MonetDB说操作成功了:

ALTER TABLE myschema.merge_table DROP TABLE data1708;
  

操作成功(0.608ms)

然后,当我试图放下桌子时:

DROP TABLE myschema.data1708;
  

DROP TABLE:无法删除表data1708(有依赖它的数据库对象)

当然,当我列出merge_table的成员时,data1708仍在那里。

我是否可以使用其他方法删除这些副本?

修改

MonetDB版本是11.25.23(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 TABLE'myschema.merge_table'的一部分

我的合并表的ID是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 | +------+------------+------+

1 个答案:

答案 0 :(得分:0)

首先,为了完整性,您使用的是哪个版本的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