首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aws/dynamoose是否可能导致SQLite本地DynamoDB语法错误?

aws/dynamoose是否可能导致SQLite本地DynamoDB语法错误?
EN

Stack Overflow用户
提问于 2020-09-03 09:07:48
回答 2查看 371关注 0票数 2

上下文

从Nodejs 6升级到12时发现的问题,以及该项目的依赖项。使用dynamoose 2.3使用docker:后端和dynamodb实例的容器化应用程序

dynamodb的Docker文件:

代码语言:javascript
复制
FROM openjdk:latest

\# Bundle dynamodb
COPY . .

EXPOSE 8000
CMD [ "java", "-jar", "DynamoDBLocal.jar" ]

问题:当提升容器时,在后端初始化了dynamodb实例之后,就会抛出下面的错误,从而导致后续的查询或调用停止,并在后端一侧返回超时。

误差

代码语言:javascript
复制
dynamodb_1  | Sep 03, 2020 8:14:36 AM com.almworks.sqlite4java.Internal log
dynamodb_1  | WARNING: [sqlite] SQLiteDBAccess$10@b6f156c: job exception
dynamodb_1  | com.almworks.sqlite4java.SQLiteException: [1] DB[1] prepare() DROP INDEX Foobar*HVI; [near "*": syntax error]
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1436)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:580)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:635)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:622)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.getPreparedStatement(AmazonDynamoDBOfflineSQLiteJob.java:138)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$10.dropGSISQLiteIndex(SQLiteDBAccess.java:1221)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$10.dropIndices(SQLiteDBAccess.java:1169)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$10.doWork(SQLiteDBAccess.java:1155)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$10.doWork(SQLiteDBAccess.java:1152)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.job(AmazonDynamoDBOfflineSQLiteJob.java:97)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteJob.execute(SQLiteJob.java:372)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue.executeJob(SQLiteQueue.java:534)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:667)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb_1  |   at java.base/java.lang.Thread.run(Thread.java:832)

我怀疑这是在通过Dynamoose的模型()创建表时发生的,而Dynamoose的模型()调用aws的DynamoDB createTable方法。

我目前正在分析nodejs 12和dynamoose 2.3的升级。在本地,我更愿意让它运行来测试项目的其他部分,所以我不介意更新索引和重新创建表,但是我希望知道这个语法错误是从哪里来的,以修复它并继续进行。

问题:aws或dynamoose是否可能导致DynamoDB本地实例尝试删除带有SQLite语法错误的索引?

EN

回答 2

Stack Overflow用户

发布于 2020-09-19 11:16:34

问题是Dynamoose 0.8.7用于支持具有同时具有hashkey和索引标记为全局的属性的模式。当跳转到最新版本时,一些突破性的更改使其在查询中添加了诸如“*”这样的字符,从而使SQLite发出抱怨。

示例:

代码语言:javascript
复制
const FoobarSchema = new dynamoose.Schema({
    foo: {
        type: String,
        hashkey: true,
        index: {
             global:true
        }
    }
});

const Foobar = dynamoose.model('Foobar', FoobarSchema, Options); // Blow up

我是这个项目和DynamoDb的新手。我不明白将这两个条件结合在一起的理由是什么,以及是否应该支持。当我有机会的时候,我会更深入地研究这个问题,并更新它。

票数 0
EN

Stack Overflow用户

发布于 2021-08-11 12:57:55

删除我的"docker/dynamodb“文件夹中的”shared instance.db“文件为我解决了这个问题(该文件是在docker-组合向上再次生成的,一切都运行良好)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63720381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档