繁体   English   中英

MonetDB-已添加表以多次合并表,无法将其删除或删除

[英]MonetDB - Table added to merge table multiple times, can't remove or drop it

我有一个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 | +------+------------+------+

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM