내용으로 건너뛰기

DynamoDB Local Bug - Creating Tables leads to no such column: indexKey_4 SQLite Errors

0

I run dynamodb local with the official latest docker image, shareddb (not in memory). I keep on getting errors like the ones below. That happens when using the official AWS Ruby DynamoDB Gem and calling the rake task aws_record:migrate to create tables. Looks like an internal error.

dynamodb  | Feb 03, 2025 6:24:23 PM com.almworks.sqlite4java.Internal log
dynamodb  | WARNING: [sqlite] [SELECT ObjectJSON FROM (SELECT ObjectJSON, indexKey_4, hashRangeValue FROM "myapp_development" WHERE indexKey_4 IS NOT NULL  ) WHERE indexKey_4 = ? ORDER BY indexKey_4 ASC, hashRangeValue ASC LIMIT ?;]DB[2][C]: exception when clearing
dynamodb  | com.almworks.sqlite4java.SQLiteException: [1] DB[2] reset [no such column: indexKey_4]
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1436)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1409)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.cacheStatementHandle(SQLiteConnection.java:1338)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.access$900(SQLiteConnection.java:51)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection$CachedController.dispose(SQLiteConnection.java:1733)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteStatement.dispose(SQLiteStatement.java:187)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.job(AmazonDynamoDBOfflineSQLiteJob.java:125)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteJob.execute(SQLiteJob.java:372)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.executeJob(SQLiteQueue.java:534)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:667)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb  | 	at java.base/java.lang.Thread.run(Thread.java:840)
dynamodb  |
dynamodb  | Feb 03, 2025 6:24:23 PM com.almworks.sqlite4java.Internal log
dynamodb  | WARNING: [sqlite] SQLiteDBAccess$20@155c88ad: job exception
dynamodb  | com.almworks.sqlite4java.SQLiteException: [1] DB[2] step() [SELECT ObjectJSON FROM (SELECT ObjectJSON, indexKey_4, hashRangeValue FROM "myapp_development" WHERE indexKey_4 IS NOT NULL  ) WHERE indexKey_4 = ? ORDER BY indexKey_4 ASC, hashRangeValue ASC LIMIT ?;]DB[2][C] [no such column: indexKey_4]
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1436)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection$BaseController.throwResult(SQLiteConnection.java:1689)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteStatement.stepResult(SQLiteStatement.java:1402)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteStatement.step(SQLiteStatement.java:301)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2403)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2041)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.job(AmazonDynamoDBOfflineSQLiteJob.java:117)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteJob.execute(SQLiteJob.java:372)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.executeJob(SQLiteQueue.java:534)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:667)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb  | 	at java.base/java.lang.Thread.run(Thread.java:840)
dynamodb  |
dynamodb  | Feb 03, 2025 6:24:23 PM com.almworks.sqlite4java.Internal log
dynamodb  | WARNING: [sqlite] SQLiteDBAccess$20@46ebf98a: job exception
dynamodb  | com.almworks.sqlite4java.SQLiteException: [1] DB[2] prepare() SELECT ObjectJSON FROM (SELECT ObjectJSON, indexKey_4, hashRangeValue FROM "myapp_development" WHERE indexKey_4 IS NOT NULL  ) WHERE indexKey_4 = ? ORDER BY indexKey_4 ASC, hashRangeValue ASC LIMIT ?; [no such column: indexKey_4]
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1436)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:580)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:635)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:622)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.getPreparedStatement(AmazonDynamoDBOfflineSQLiteJob.java:159)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2376)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2041)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.job(AmazonDynamoDBOfflineSQLiteJob.java:117)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteJob.execute(SQLiteJob.java:372)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.executeJob(SQLiteQueue.java:534)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:667)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb  | 	at java.base/java.lang.Thread.run(Thread.java:840)
dynamodb  |
dynamodb  | Feb 03, 2025 6:24:23 PM com.almworks.sqlite4java.Internal log
dynamodb  | WARNING: [sqlite] SQLiteDBAccess$20@299c78bb: job exception
dynamodb  | com.almworks.sqlite4java.SQLiteException: [1] DB[2] prepare() SELECT ObjectJSON FROM (SELECT ObjectJSON, indexKey_4, hashRangeValue FROM "myapp_development" WHERE indexKey_4 IS NOT NULL  ) WHERE indexKey_4 = ? ORDER BY indexKey_4 ASC, hashRangeValue ASC LIMIT ?; [no such column: indexKey_4]
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1436)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:580)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:635)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:622)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.getPreparedStatement(AmazonDynamoDBOfflineSQLiteJob.java:159)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2376)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2041)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.job(AmazonDynamoDBOfflineSQLiteJob.java:117)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteJob.execute(SQLiteJob.java:372)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.executeJob(SQLiteQueue.java:534)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:667)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb  | 	at java.base/java.lang.Thread.run(Thread.java:840)
dynamodb  |
dynamodb  | Feb 03, 2025 6:24:23 PM com.almworks.sqlite4java.Internal log
dynamodb  | WARNING: [sqlite] SQLiteDBAccess$20@5ed36f69: job exception
dynamodb  | com.almworks.sqlite4java.SQLiteException: [1] DB[2] prepare() SELECT ObjectJSON FROM (SELECT ObjectJSON, indexKey_4, hashRangeValue FROM "myapp_development" WHERE indexKey_4 IS NOT NULL  ) WHERE indexKey_4 = ? ORDER BY indexKey_4 ASC, hashRangeValue ASC LIMIT ?; [no such column: indexKey_4]
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1436)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:580)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:635)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:622)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.getPreparedStatement(AmazonDynamoDBOfflineSQLiteJob.java:159)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2376)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2041)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.job(AmazonDynamoDBOfflineSQLiteJob.java:117)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteJob.execute(SQLiteJob.java:372)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.executeJob(SQLiteQueue.java:534)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:667)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb  | 	at java.base/java.lang.Thread.run(Thread.java:840)
dynamodb  |
dynamodb  | Feb 03, 2025 6:24:23 PM com.almworks.sqlite4java.Internal log
dynamodb  | WARNING: [sqlite] SQLiteDBAccess$20@689f60cb: job exception
dynamodb  | com.almworks.sqlite4java.SQLiteException: [1] DB[2] prepare() SELECT ObjectJSON FROM (SELECT ObjectJSON, indexKey_4, hashRangeValue FROM "myapp_development" WHERE indexKey_4 IS NOT NULL  ) WHERE indexKey_4 = ? ORDER BY indexKey_4 ASC, hashRangeValue ASC LIMIT ?; [no such column: indexKey_4]
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1436)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:580)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:635)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:622)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.getPreparedStatement(AmazonDynamoDBOfflineSQLiteJob.java:159)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2376)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$20.doWork(SQLiteDBAccess.java:2041)
dynamodb  | 	at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.job(AmazonDynamoDBOfflineSQLiteJob.java:117)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteJob.execute(SQLiteJob.java:372)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.executeJob(SQLiteQueue.java:534)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:667)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb  | 	at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb  | 	at java.base/java.lang.Thread.run(Thread.java:840)
  • Can you supply more information, the DDB Local version, and the model/code you are using?

  • Using the latest docker image 2.5.4. I didnt have any dynamodb local problems, but in the last week I get more and more SQLite errors, leading to a total corruption of the database. Using the official aws ruby sdk to access the database.

질문됨 2년 전207회 조회

1개 답변
-1

The error you're encountering appears to be an internal issue with DynamoDB Local's SQLite implementation. The error messages indicate that there's a problem with a column named "indexKey_4" that doesn't exist in the table structure.

This is likely a bug in the DynamoDB Local implementation, as it's trying to access a column that hasn't been properly created or doesn't exist in the underlying SQLite database.

To work around this issue, you could try the following:

  1. Ensure you're using the latest version of the DynamoDB Local Docker image.

  2. If you're using a persistent data directory (-dbPath option), try deleting it and letting DynamoDB Local create a fresh database.

  3. Instead of using the shared database mode, you could try running DynamoDB Local in-memory. This might help isolate whether the issue is related to the persistent storage.

  4. If possible, simplify your table structure and indexes to see if the error persists with a more basic configuration.

  5. Consider reporting this issue to AWS support or on the AWS DynamoDB GitHub repository, as it appears to be an internal bug with the local implementation.

If these steps don't resolve the issue, you may need to consider alternative testing strategies or wait for a fix from AWS. Remember that DynamoDB Local is meant for testing and development purposes, and may not always perfectly replicate the behavior of the full DynamoDB service.
Sources
Community | Run and test DynamoDB applications locally using Docker and Testcontainers
amazon/dynamodb-local Error: "Invalid directory for database creation" | AWS re:Post

답변함 2년 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.