时
select optimizer;它回来了
SELECT: identifier 'optimizer' unknown有什么问题吗?而且我无法使用\d在数据库中找到sys表。
如果我想添加一个优化器myopt,它是否足以执行以下步骤:在/monetdb5/optimizer/
中使用新的管道
发布于 2021-01-08 09:45:08
对于第一个问题:如果您的current_schema不是sys,则需要使用select sys.optimizer;。
对于您的第二个问题:最好的现有示例可能在monetdb5/extras/mal_optimizer_template中。接下来,它基本上是检查源代码,看看其他优化器是如何实现的。注意,虽然不经常发生这种情况,但MonetDB的内部结构可以在(主要)版本之间进行更改。我会重新评论你使用Oct2020或更新。
发布于 2021-01-08 09:40:33
从Oct2020开始,变量现在有了一个模式(以保持它是其他的SQL对象)。在您的会话中,'sys‘不是会话的模式,这就是为什么它找不到’优化器‘变量的原因,对于表也是如此。
在默认分支(将在下一个版本中可用)中,我在用户上添加了一个“模式路径”属性,以便在当前会话的模式之外搜索SQL对象。默认情况下,它包括“sys”模式。
发布于 2021-01-08 10:09:43
关于你的第二个问题,
您还必须创建优化器管道并将其添加到opt_pipes.c中。查找default_pipe,然后将其复制/粘贴到一个新管道中,并将优化器添加到其中。
还有一些地方需要添加优化器,比如opt_wrapper.c中的opt_wrapper.c数组。只需模仿像"reorder"这样的标准优化器。
https://stackoverflow.com/questions/65626005
复制相似问题