Couchbase N1qlQuery:删除导致查询服务出错
Couchbase N1qlQuery: delete cause error to the query service
我尝试运行这个查询
delete from bucket o
use keys (select raw ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t), s), u)
from bucket
use keys 'SS')
我收到这样的回复:
{
"status": "Unexpected server error"
}
在服务器日志中我看到了这个:
Service 'query' exited with status 1. Restarting. Messages: runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1 fp=0xc20e97cfc0 sp=0xc20e97cfb8
created by github.com/couchbase/query/parser/n1ql.NewLexerWithInit
/home/couchbase/jenkins/workspace/watson-unix/goproj/src/github.com/couchbase/query/parser/n1ql/n1ql.nn.go:30999 +0x4a6c9
[goport] 2016/11/29 08:40:11 /opt/couchbase/bin/cbq-engine terminated: signal: aborted (core dumped)
这个查询有什么问题?
我正在使用 couchbase 4.5 版。
USE KEYS 需要键数组。 ARRAY_CONCAT() returns 数组和子查询 returns 数组。它变成数组的数组。
删除其中一个数组如下。
从存储桶 o 中删除
使用键 (select raw ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t), s), u)
从桶里
使用键 'SS')[0];
如果 ARRAY_CONCAT() 参数缺失或为空,它可能会 return 在 4.5 中出现相同的恐慌错误。这已在 4.5.1 中修复。
您还可以使用 ARRAY_FLATTEN() 函数或 FIRST 运算符。
从存储桶中删除 o 使用密钥
ARRAY_FLATTEN( ( select 原始 ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT (d, t), s), u) 从 bucket 使用键 'SS'), 1)
返回 meta(o).id;
或
从存储桶 o 中删除
使用键 FIRST x FOR x IN
( select 原始 ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t),小号),你)
从桶里
使用键 'SS' )
结尾
返回 meta(o).id;
请注意,当子查询用作表达式(例如,作为 ARRAY_FLATTEN() 的参数或在 FIRST 构造中)时,子查询周围需要括号(粗体斜体)
我尝试运行这个查询
delete from bucket o
use keys (select raw ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t), s), u)
from bucket
use keys 'SS')
我收到这样的回复:
{
"status": "Unexpected server error"
}
在服务器日志中我看到了这个:
Service 'query' exited with status 1. Restarting. Messages: runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1 fp=0xc20e97cfc0 sp=0xc20e97cfb8
created by github.com/couchbase/query/parser/n1ql.NewLexerWithInit
/home/couchbase/jenkins/workspace/watson-unix/goproj/src/github.com/couchbase/query/parser/n1ql/n1ql.nn.go:30999 +0x4a6c9
[goport] 2016/11/29 08:40:11 /opt/couchbase/bin/cbq-engine terminated: signal: aborted (core dumped)
这个查询有什么问题?
我正在使用 couchbase 4.5 版。
USE KEYS 需要键数组。 ARRAY_CONCAT() returns 数组和子查询 returns 数组。它变成数组的数组。
删除其中一个数组如下。
从存储桶 o 中删除 使用键 (select raw ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t), s), u) 从桶里 使用键 'SS')[0];
如果 ARRAY_CONCAT() 参数缺失或为空,它可能会 return 在 4.5 中出现相同的恐慌错误。这已在 4.5.1 中修复。
您还可以使用 ARRAY_FLATTEN() 函数或 FIRST 运算符。
从存储桶中删除 o 使用密钥 ARRAY_FLATTEN( ( select 原始 ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT (d, t), s), u) 从 bucket 使用键 'SS'), 1) 返回 meta(o).id;
或
从存储桶 o 中删除 使用键 FIRST x FOR x IN ( select 原始 ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t),小号),你) 从桶里 使用键 'SS' ) 结尾 返回 meta(o).id;
请注意,当子查询用作表达式(例如,作为 ARRAY_FLATTEN() 的参数或在 FIRST 构造中)时,子查询周围需要括号(粗体斜体)