【问题标题】:Marklogic Template Driven Extraction: insert templateMarklogic 模板驱动提取:插入模板
【发布时间】:2017-10-12 16:36:50
【问题描述】:

我正在尝试上传一个模板以与 MarkLogic 模板驱动提取一起使用。我在控制台中使用 Javascript(在本地主机上)。但是,无论我尝试什么,尝试上传时都会遇到相同的错误。错误:“[javascript] SEC-INVALIDPERM: xdmp:document-insert ....”我给了自己所有可能的权限,但我仍然不断收到错误消息。

'use strict'

declareUpdate();
var tde = require("/MarkLogic/tde.xqy");
var MatchesTDE = xdmp.toJSON(
  {
    "template": {
      "context": "/com.marklogic.client.mapper.MatchesDoc",
      "collections": ["com.marklogic.client.mapper.MatchesDoc"],
      "rows": [
        {
          "schemaName": "mapper",
          "viewName": "matches",
          "columns": [
            {
              "name": "nrOfDocumentsInNC",
              "scalarType": "long",
              "val": "nrOfDocumentsInNC"
            },
            {
              "name": "totalNrOfDocuments",
              "scalarType": "long",
              "val": "totalNrOfDocuments"
            },
            {
              "name": "matchesID",
              "scalarType": "long",
              "val": "matchesID"
            },
            {
              "name": "uniqueInNC",
              "scalarType": "boolean",
              "val": "uniqueInNC"
            }
          ]
        }
      ]
    }
  }
);

tde.templateInsert(
  "/MatchesDoc/TDE.json" ,
  MatchesTDE,
  xdmp.defaultPermissions(),
  ["com.marklogic.client.autorelationmapper.MatchesDoc"]
);

顺便说一句,如果我使用tde.validate([MatchesTDE]); 验证模板,我会得到true。如果我用

测试脚本
tde.nodeDataExtract( 
  [cts.doc( "com.marklogic.client.mapper.MatchesDoc/2722286.json" )],
  [MatchesTDE]
);

它有效。此外,当我按照https://developer.marklogic.com/learn/template-driven-extraction 上的 TDE 教程进行操作时,除了 insertTemplate 函数之外,一切正常。我在那里也遇到同样的错误。我做错了什么?

【问题讨论】:

  • 我们谈论的是哪个版本的 MarkLogic?
  • 还要确保您已将“tde-admin”角色添加到执行此查询的用户中。
  • 我正在使用 MarkLogic 9.0。是的,我添加了“tde-admin”角色。
  • 您是否在内容数据库的上下文中执行 tde.templateInsert()?内容数据库是否有模式数据库?
  • 我在内容数据库(JSON 文档存储)上运行它,它没有架构。我正在尝试使用 TDE 来使用 SQL。并将其用于 ODBC 驱动程序,以便能够可视化 Tableau 中的数据。

标签: marklogic


【解决方案1】:

尝试删除运行此代码的用户的所有权限。或者尝试使用空的第三个参数运行tde.templateInsert()

tde.templateInsert(
  "/MatchesDoc/TDE.json" ,
  MatchesTDE,
  [],
  ["com.marklogic.client.autorelationmapper.MatchesDoc"]
);

听起来这是你的问题:

我给了自己所有可能的权限,但我仍然不断收到错误。

用户没有权限,文档有权限。用户在编写文档时只有默认权限。

用户的默认权限是分配给用户插入的文档的一组权限。默认权限授予该用户在数据库中的任何额外权限。通常,管理员用户没有分配给它的默认权限。

当您将所有这些默认权限分配给您的用户时,您最终会在tde.templateInsert() 的第三个参数中添加大量权限列表,您将在其中传递xdmp.defaultPermissions()。其中至少有一个是无效的,因此您会收到 SEC-INVALIDPERM 错误。

【讨论】:

  • 都试过了。最终,解决我的问题的是完全重新安装并删除所有数据。现在,一切都像魅力一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 2017-07-23
相关资源
最近更新 更多