From 08a9452291c34925407fcc6261fe2d7108df54b7 Mon Sep 17 00:00:00 2001 From: Ashhar Hasan Date: Sat, 21 Aug 2021 19:26:42 +0530 Subject: [PATCH 1/4] Make SUPPORTS_RENAME_SCHEMA default to SUPPORTS_CREATE_SCHEMA If a connector doesn't support creating schemas it's not possible to test if it supports renaming schemas. So to ensure test results aren't misleading enforce that connectors that don't support schema creation assume that schema rename isn't supported. The assumption is explicitly validated so where needed it can be overridden by the connector. --- .../main/java/io/trino/testing/TestingConnectorBehavior.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testing/trino-testing/src/main/java/io/trino/testing/TestingConnectorBehavior.java b/testing/trino-testing/src/main/java/io/trino/testing/TestingConnectorBehavior.java index a7882d3ad2bb..49c4eebba4f4 100644 --- a/testing/trino-testing/src/main/java/io/trino/testing/TestingConnectorBehavior.java +++ b/testing/trino-testing/src/main/java/io/trino/testing/TestingConnectorBehavior.java @@ -46,7 +46,8 @@ public enum TestingConnectorBehavior SUPPORTS_JOIN_PUSHDOWN_WITH_VARCHAR_EQUALITY(fallback -> fallback.test(SUPPORTS_JOIN_PUSHDOWN) && fallback.test(SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_EQUALITY)), SUPPORTS_JOIN_PUSHDOWN_WITH_VARCHAR_INEQUALITY(fallback -> fallback.test(SUPPORTS_JOIN_PUSHDOWN) && fallback.test(SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_INEQUALITY)), SUPPORTS_CREATE_SCHEMA, - SUPPORTS_RENAME_SCHEMA, + // Expect rename to be supported when create schema is supported, to help make connector implementations coherent. + SUPPORTS_RENAME_SCHEMA(SUPPORTS_CREATE_SCHEMA), SUPPORTS_CREATE_TABLE, SUPPORTS_CREATE_TABLE_WITH_DATA(SUPPORTS_CREATE_TABLE), From 3db2372abcf898e3e634796c6b43dc038c29b892 Mon Sep 17 00:00:00 2001 From: Ashhar Hasan Date: Sat, 21 Aug 2021 13:47:48 +0530 Subject: [PATCH 2/4] Implement renameSchema in base-jdbc --- .../io/trino/plugin/jdbc/BaseJdbcClient.java | 19 +++++++++++++++++++ .../trino/plugin/jdbc/CachingJdbcClient.java | 7 +++++++ .../plugin/jdbc/DefaultJdbcMetadata.java | 6 ++++++ .../plugin/jdbc/ForwardingJdbcClient.java | 6 ++++++ .../java/io/trino/plugin/jdbc/JdbcClient.java | 2 ++ .../plugin/jdbc/jmx/JdbcClientStats.java | 8 ++++++++ .../jdbc/jmx/StatisticsAwareJdbcClient.java | 6 ++++++ .../TestJdbcCachingConnectorSmokeTest.java | 1 - .../plugin/jdbc/TestJdbcConnectorTest.java | 1 - .../plugin/clickhouse/ClickHouseClient.java | 6 ++++++ .../trino/plugin/druid/DruidJdbcClient.java | 6 ++++++ .../io/trino/plugin/memsql/MemSqlClient.java | 6 ++++++ .../io/trino/plugin/mysql/MySqlClient.java | 6 ++++++ .../io/trino/plugin/oracle/OracleClient.java | 6 ++++++ .../trino/plugin/phoenix/PhoenixClient.java | 6 ++++++ .../trino/plugin/phoenix5/PhoenixClient.java | 6 ++++++ .../TestPostgreSqlConnectorTest.java | 3 --- .../plugin/sqlserver/SqlServerClient.java | 6 ++++++ 18 files changed, 102 insertions(+), 5 deletions(-) diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/BaseJdbcClient.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/BaseJdbcClient.java index ea3735df967c..1d674aaea8e8 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/BaseJdbcClient.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/BaseJdbcClient.java @@ -828,6 +828,25 @@ protected String dropSchemaSql(String schemaName) return "DROP SCHEMA " + quoted(schemaName); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + ConnectorIdentity identity = session.getIdentity(); + try (Connection connection = connectionFactory.openConnection(session)) { + String remoteSchemaName = identifierMapping.toRemoteSchemaName(identity, connection, schemaName); + String newRemoteSchemaName = identifierMapping.toRemoteSchemaName(identity, connection, newSchemaName); + execute(connection, renameSchemaSql(remoteSchemaName, newRemoteSchemaName)); + } + catch (SQLException e) { + throw new TrinoException(JDBC_ERROR, e); + } + } + + protected String renameSchemaSql(String remoteSchemaName, String newRemoteSchemaName) + { + return "ALTER SCHEMA " + quoted(remoteSchemaName) + " RENAME TO " + quoted(newRemoteSchemaName); + } + protected void execute(ConnectorSession session, String query) { try (Connection connection = connectionFactory.openConnection(session)) { diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/CachingJdbcClient.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/CachingJdbcClient.java index 73c33845e46c..dc3d510362bf 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/CachingJdbcClient.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/CachingJdbcClient.java @@ -365,6 +365,13 @@ public void dropSchema(ConnectorSession session, String schemaName) invalidateSchemasCache(); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + delegate.renameSchema(session, schemaName, newSchemaName); + invalidateSchemasCache(); + } + @Override public void setColumnComment(ConnectorSession session, JdbcTableHandle handle, JdbcColumnHandle column, Optional comment) { diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/DefaultJdbcMetadata.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/DefaultJdbcMetadata.java index ef49e3e596f1..a3d011355a4c 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/DefaultJdbcMetadata.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/DefaultJdbcMetadata.java @@ -790,4 +790,10 @@ public void dropSchema(ConnectorSession session, String schemaName) { jdbcClient.dropSchema(session, schemaName); } + + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + jdbcClient.renameSchema(session, schemaName, newSchemaName); + } } diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ForwardingJdbcClient.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ForwardingJdbcClient.java index 0ff945fd177b..13862d99bd73 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ForwardingJdbcClient.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ForwardingJdbcClient.java @@ -311,6 +311,12 @@ public void dropSchema(ConnectorSession session, String schemaName) delegate().dropSchema(session, schemaName); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + delegate().renameSchema(session, schemaName, newSchemaName); + } + @Override public Optional getSystemTable(ConnectorSession session, SchemaTableName tableName) { diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcClient.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcClient.java index 8b827c2c6692..14d33b09d300 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcClient.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcClient.java @@ -163,6 +163,8 @@ PreparedStatement getPreparedStatement(Connection connection, String sql) void dropSchema(ConnectorSession session, String schemaName); + void renameSchema(ConnectorSession session, String schemaName, String newSchemaName); + default Optional getSystemTable(ConnectorSession session, SchemaTableName tableName) { return Optional.empty(); diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/jmx/JdbcClientStats.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/jmx/JdbcClientStats.java index 26650bef19a2..cb9415a1e9d2 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/jmx/JdbcClientStats.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/jmx/JdbcClientStats.java @@ -32,6 +32,7 @@ public final class JdbcClientStats private final JdbcApiStats setColumnComment = new JdbcApiStats(); private final JdbcApiStats dropColumn = new JdbcApiStats(); private final JdbcApiStats dropSchema = new JdbcApiStats(); + private final JdbcApiStats renameSchema = new JdbcApiStats(); private final JdbcApiStats dropTable = new JdbcApiStats(); private final JdbcApiStats finishInsertTable = new JdbcApiStats(); private final JdbcApiStats getColumns = new JdbcApiStats(); @@ -154,6 +155,13 @@ public JdbcApiStats getDropSchema() return dropSchema; } + @Managed + @Nested + public JdbcApiStats getRenameSchema() + { + return renameSchema; + } + @Managed @Nested public JdbcApiStats getDropTable() diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/jmx/StatisticsAwareJdbcClient.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/jmx/StatisticsAwareJdbcClient.java index c3ad0824535c..ceb6b957fae3 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/jmx/StatisticsAwareJdbcClient.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/jmx/StatisticsAwareJdbcClient.java @@ -330,6 +330,12 @@ public void dropSchema(ConnectorSession session, String schemaName) stats.getDropSchema().wrap(() -> delegate().dropSchema(session, schemaName)); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + stats.getRenameSchema().wrap(() -> delegate().renameSchema(session, schemaName, newSchemaName)); + } + @Override public Optional getSystemTable(ConnectorSession session, SchemaTableName tableName) { diff --git a/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJdbcCachingConnectorSmokeTest.java b/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJdbcCachingConnectorSmokeTest.java index bad2a2a82dd2..486184e10801 100644 --- a/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJdbcCachingConnectorSmokeTest.java +++ b/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJdbcCachingConnectorSmokeTest.java @@ -131,7 +131,6 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) { switch (connectorBehavior) { case SUPPORTS_RENAME_TABLE_ACROSS_SCHEMAS: - case SUPPORTS_RENAME_SCHEMA: return false; default: diff --git a/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJdbcConnectorTest.java b/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJdbcConnectorTest.java index e73dc7bdbc60..6fdd94d87bec 100644 --- a/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJdbcConnectorTest.java +++ b/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJdbcConnectorTest.java @@ -58,7 +58,6 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) return false; case SUPPORTS_RENAME_TABLE_ACROSS_SCHEMAS: - case SUPPORTS_RENAME_SCHEMA: return false; case SUPPORTS_COMMENT_ON_TABLE: diff --git a/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java b/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java index 8d258e3c2536..21b55e44259f 100644 --- a/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java +++ b/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java @@ -266,6 +266,12 @@ public void dropSchema(ConnectorSession session, String schemaName) execute(session, "DROP DATABASE " + quoted(schemaName)); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); + } + @Override public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column) { diff --git a/plugin/trino-druid/src/main/java/io/trino/plugin/druid/DruidJdbcClient.java b/plugin/trino-druid/src/main/java/io/trino/plugin/druid/DruidJdbcClient.java index fc3eb7c059ee..0782a0f1cc97 100644 --- a/plugin/trino-druid/src/main/java/io/trino/plugin/druid/DruidJdbcClient.java +++ b/plugin/trino-druid/src/main/java/io/trino/plugin/druid/DruidJdbcClient.java @@ -400,6 +400,12 @@ public void dropSchema(ConnectorSession session, String schemaName) throw new TrinoException(NOT_SUPPORTED, "This connector does not support dropping schemas"); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); + } + private WriteMapping legacyToWriteMapping(Type type) { // TODO (https://github.com/trinodb/trino/issues/497) Implement proper type mapping and add test diff --git a/plugin/trino-memsql/src/main/java/io/trino/plugin/memsql/MemSqlClient.java b/plugin/trino-memsql/src/main/java/io/trino/plugin/memsql/MemSqlClient.java index 89754fd5aefe..59084502084d 100644 --- a/plugin/trino-memsql/src/main/java/io/trino/plugin/memsql/MemSqlClient.java +++ b/plugin/trino-memsql/src/main/java/io/trino/plugin/memsql/MemSqlClient.java @@ -422,6 +422,12 @@ public void renameColumn(ConnectorSession session, JdbcTableHandle handle, JdbcC } } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); + } + @Override protected String getTableSchemaName(ResultSet resultSet) throws SQLException diff --git a/plugin/trino-mysql/src/main/java/io/trino/plugin/mysql/MySqlClient.java b/plugin/trino-mysql/src/main/java/io/trino/plugin/mysql/MySqlClient.java index a2aa7322ac72..a672422cde9e 100644 --- a/plugin/trino-mysql/src/main/java/io/trino/plugin/mysql/MySqlClient.java +++ b/plugin/trino-mysql/src/main/java/io/trino/plugin/mysql/MySqlClient.java @@ -515,6 +515,12 @@ public void renameColumn(ConnectorSession session, JdbcTableHandle handle, JdbcC } } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); + } + @Override protected void copyTableSchema(Connection connection, String catalogName, String schemaName, String tableName, String newTableName, List columnNames) { diff --git a/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClient.java b/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClient.java index 44d08a0cfb46..52d94753b7a8 100644 --- a/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClient.java +++ b/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClient.java @@ -244,6 +244,12 @@ public void dropSchema(ConnectorSession session, String schemaName) throw new TrinoException(NOT_SUPPORTED, "This connector does not support dropping schemas"); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); + } + @Override public Optional toColumnMapping(ConnectorSession session, Connection connection, JdbcTypeHandle typeHandle) { diff --git a/plugin/trino-phoenix/src/main/java/io/trino/plugin/phoenix/PhoenixClient.java b/plugin/trino-phoenix/src/main/java/io/trino/plugin/phoenix/PhoenixClient.java index 5cd3df98402d..5fe3a8686a06 100644 --- a/plugin/trino-phoenix/src/main/java/io/trino/plugin/phoenix/PhoenixClient.java +++ b/plugin/trino-phoenix/src/main/java/io/trino/plugin/phoenix/PhoenixClient.java @@ -621,6 +621,12 @@ protected void renameTable(ConnectorSession session, String catalogName, String throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming tables"); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); + } + @Override public Map getTableProperties(ConnectorSession session, JdbcTableHandle handle) { diff --git a/plugin/trino-phoenix5/src/main/java/io/trino/plugin/phoenix5/PhoenixClient.java b/plugin/trino-phoenix5/src/main/java/io/trino/plugin/phoenix5/PhoenixClient.java index 50446804e126..4e75b06fd453 100644 --- a/plugin/trino-phoenix5/src/main/java/io/trino/plugin/phoenix5/PhoenixClient.java +++ b/plugin/trino-phoenix5/src/main/java/io/trino/plugin/phoenix5/PhoenixClient.java @@ -613,6 +613,12 @@ protected void renameTable(ConnectorSession session, String catalogName, String throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming tables"); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); + } + @Override public Map getTableProperties(ConnectorSession session, JdbcTableHandle handle) { diff --git a/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestPostgreSqlConnectorTest.java b/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestPostgreSqlConnectorTest.java index ce47c0dbd89f..360f15589219 100644 --- a/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestPostgreSqlConnectorTest.java +++ b/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestPostgreSqlConnectorTest.java @@ -116,9 +116,6 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) case SUPPORTS_RENAME_TABLE_ACROSS_SCHEMAS: return false; - case SUPPORTS_RENAME_SCHEMA: - return false; - case SUPPORTS_CANCELLATION: return true; diff --git a/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClient.java b/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClient.java index 4f58691d8bbc..4f8874b91908 100644 --- a/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClient.java +++ b/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClient.java @@ -241,6 +241,12 @@ public void renameColumn(ConnectorSession session, JdbcTableHandle handle, JdbcC execute(session, sql); } + @Override + public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) + { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); + } + @Override protected void copyTableSchema(Connection connection, String catalogName, String schemaName, String tableName, String newTableName, List columnNames) { From 7b32f8c8bb97281b01cc8f80363bc44b8ee4c348 Mon Sep 17 00:00:00 2001 From: Ashhar Hasan Date: Wed, 12 Jan 2022 15:19:32 +0530 Subject: [PATCH 3/4] fixup! Implement renameSchema in base-jdbc --- .../main/java/io/trino/plugin/clickhouse/ClickHouseClient.java | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java b/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java index 21b55e44259f..16132074f70c 100644 --- a/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java +++ b/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java @@ -269,6 +269,7 @@ public void dropSchema(ConnectorSession session, String schemaName) @Override public void renameSchema(ConnectorSession session, String schemaName, String newSchemaName) { + // TODO: https://github.com/trinodb/trino/issues/10558 throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas"); } From c95623dd9b8be24513f6825cb5d3fd4f840bf4ce Mon Sep 17 00:00:00 2001 From: Ashhar Hasan Date: Wed, 12 Jan 2022 15:20:25 +0530 Subject: [PATCH 4/4] Document ALTER SCHEMA ... RENAME support for JDBC connectors --- .../sphinx/connector/alter-schema-limitation.fragment | 5 +++++ docs/src/main/sphinx/connector/postgresql.rst | 2 ++ docs/src/main/sphinx/connector/redshift.rst | 11 +++++------ 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 docs/src/main/sphinx/connector/alter-schema-limitation.fragment diff --git a/docs/src/main/sphinx/connector/alter-schema-limitation.fragment b/docs/src/main/sphinx/connector/alter-schema-limitation.fragment new file mode 100644 index 000000000000..501301f4a663 --- /dev/null +++ b/docs/src/main/sphinx/connector/alter-schema-limitation.fragment @@ -0,0 +1,5 @@ +ALTER SCHEMA +^^^^^^^^^^^^ + +The connector supports renaming a schema with the ``ALTER SCHEMA RENAME`` +statement. ``ALTER SCHEMA SET AUTHORIZATION`` is not supported. diff --git a/docs/src/main/sphinx/connector/postgresql.rst b/docs/src/main/sphinx/connector/postgresql.rst index 69e013061830..4f82510ffc4e 100644 --- a/docs/src/main/sphinx/connector/postgresql.rst +++ b/docs/src/main/sphinx/connector/postgresql.rst @@ -146,6 +146,8 @@ statements, the connector supports the following features: .. include:: alter-table-limitation.fragment +.. include:: alter-schema-limitation.fragment + .. _postgresql-pushdown: Pushdown diff --git a/docs/src/main/sphinx/connector/redshift.rst b/docs/src/main/sphinx/connector/redshift.rst index 55f4d194c2dd..ad6db3a81010 100644 --- a/docs/src/main/sphinx/connector/redshift.rst +++ b/docs/src/main/sphinx/connector/redshift.rst @@ -98,11 +98,10 @@ statements, the connector supports the following features: * :doc:`/sql/insert` * :doc:`/sql/delete` * :doc:`/sql/truncate` -* :doc:`/sql/create-table` -* :doc:`/sql/create-table-as` -* :doc:`/sql/drop-table` -* :doc:`/sql/create-schema` -* :doc:`/sql/drop-schema` -* :doc:`/sql/comment` +* :ref:`sql-schema-table-management` .. include:: sql-delete-limitation.fragment + +.. include:: alter-table-limitation.fragment + +.. include:: alter-schema-limitation.fragment