【问题标题】:executing SQL command in a variable using curl使用 curl 在变量中执行 SQL 命令
【发布时间】:2021-08-16 06:23:31
【问题描述】:

我正在尝试针对 MarkLogic 服务器编写以下 curl 命令:-

curl --digest -u "${USERNAME}:${PASSWORD}" -k -X POST "${URLCALL}" -H "Content-Type: application/json" -H "cache-control: no-cache" -H "Accept: text/csv" -d@"{$SELECTQUERY}"

但是上面的命令对我不起作用。我得到的错误是:

Warning: Couldn't read data from file "{select count(*) from
Warning: db.table1}", this makes an empty POST.

在哪里:

USERNAME=admin
PASSWORD=admin
URLCALL="https://localhost:8010/v1/rows"
SELECTQUERY="select count(*) from db.table1"

我正在尝试执行此 curl 并在我的 MarkLogic 服务器中的 SELECTQUERY 变量内运行 SQL 查询,并且我希望将此查询的计数也发送到一个变量。我怎样才能实现它?

【问题讨论】:

  • 这个空间在USERNAME= admin是故意的
  • 没有。这不是故意的。
  • 虽然变量赋值在我的脚本中没有问题,但导致问题的是 curl 命令。

标签: shell unix curl marklogic


【解决方案1】:

对于 curl 数据参数(-d--data),如果您设置的是字符串而不是对文件路径的引用,则删除 @

如果您通过 SQL 语句发送,则将 Content-typeapplication/json 更改为 application/sql

https://docs.marklogic.com/REST/POST/v1/rows

内容类型
请求正文的 MIME 类型。允许值:

  • application/json 用于以 JSON 格式序列化为 AST(抽象语法树)的光学查询
  • application/vnd.marklogic.querydsl+javascript 用于以 JavaScript 语法表示的光学查询
  • application/sql 用于 SQL SELECT 语句
  • application/sparql-query 用于 SPARQL SELECT 语句

你会想使用:

curl --digest -u "${USERNAME}:${PASSWORD}" -k -X POST "${URLCALL}" -H "Content-Type: application/sql" -H "cache-control: no-cache" -H "Accept: text/csv" -d "{$SELECTQUERY}"

【讨论】:

  • {"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"RESTAPI-INVALIDREQ", "message":"RESTAPI-INVALIDREQ: fn. error(null, 'RESTAPI-INVALIDREQ', 'unsupported content type: '+contentType); -- Invalid request: reason: unsupported content type: application/sql"}} --> 我得到这个作为上面 curl 的输出命令
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2013-08-11
  • 2014-08-27
  • 1970-01-01
相关资源
最近更新 更多