Skip to content

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.

asked 2 years ago204 views

1 Answer
-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

answered 2 years ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.