{"record":{"id":"4951f8fde1593394","repo":"prestodb/presto","slug":"listing-all-tables-after-adding-dropping-altering","errorCode":null,"errorMessage":"Listing all tables after adding/dropping/altering tables/views in a transaction is not supported","messagePattern":"Listing all tables after adding/dropping/altering tables/views in a transaction is not supported","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/SemiTransactionalHiveMetastore.java","lineNumber":204,"sourceCode":"    }\n\n    public synchronized List<String> getAllDatabases(MetastoreContext metastoreContext)\n    {\n        checkReadable();\n        return delegate.getAllDatabases(metastoreContext);\n    }\n\n    public synchronized Optional<Database> getDatabase(MetastoreContext metastoreContext, String databaseName)\n    {\n        checkReadable();\n        return delegate.getDatabase(metastoreContext, databaseName);\n    }\n\n    public synchronized Optional<List<String>> getAllTables(MetastoreContext metastoreContext, String databaseName)\n    {\n        checkReadable();\n        if (!tableActions.isEmpty()) {\n            throw new UnsupportedOperationException(\"Listing all tables after adding/dropping/altering tables/views in a transaction is not supported\");\n        }\n        return delegate.getAllTables(metastoreContext, databaseName);\n    }\n\n    public Optional<Table> getTable(MetastoreContext metastoreContext, String databaseName, String tableName)\n    {\n        HiveTableHandle hiveTableHandle = new HiveTableHandle(databaseName, tableName);\n        return getTable(metastoreContext, hiveTableHandle);\n    }\n\n    public synchronized Optional<Table> getTable(MetastoreContext metastoreContext, HiveTableHandle hiveTableHandle)\n    {\n        checkReadable();\n        Action<TableAndMore> tableAction = tableActions.get(hiveTableHandle.getSchemaTableName());\n        if (tableAction == null) {\n            return metastoreContext.getRuntimeStats().recordWallTime(GET_TABLE_TIME_NANOS, () -> delegate.getTable(metastoreContext, hiveTableHandle));\n        }\n        switch (tableAction.getType()) {","sourceCodeStart":186,"sourceCodeEnd":222,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/SemiTransactionalHiveMetastore.java#L186-L222","documentation":"getAllTables on SemiTransactionalHiveMetastore refuses to list tables when the current transaction already contains add/drop/alter actions on tables or views, because the delegate metastore's listing would not reflect those uncommitted changes and could yield inconsistent results.","triggerScenarios":"Thrown at presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/SemiTransactionalHiveMetastore.java:204 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restructure the workload so table listing happens before any DDL in the same transaction, or in a separate transaction/session","Commit or roll back the pending table changes before calling listTables"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}