apache / shardingsphere

Empowering Data Intelligence with Distributed SQL for Sharding, Scalability, and Security Across All Databases.
Apache License 2.0
19.97k stars 6.75k forks source link

sharding-jdbc 5.3.1 Using postgresql to specify schema cross library query exceptions #24911

Closed c1820646795 closed 4 months ago

c1820646795 commented 1 year ago

The sharding configuration is as follows:


dataSources:
  db1:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: org.postgresql.Driver
    jdbcUrl: jdbc:postgresql://xxx/db1?currentSchema=test&binaryTransfer=false
    username: test
    password: 123456
  db2:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: org.postgresql.Driver
    jdbcUrl: jdbc:postgresql://xxx/db2?currentSchema=test&binaryTransfer=false
    username: test
    password: 123456

rules:
  - !SHARDING
    tables:
      t_order:
        actualDataNodes: db1.t_order_${1..3}
        tableStrategy:
          standard:
            shardingColumn: id
            shardingAlgorithmName: t_order_inline
      t_order_item:
        actualDataNodes: db2.t_order_item_${1..3}
        tableStrategy:
          standard:
            shardingColumn: id
            shardingAlgorithmName: t-order-item-inline

    defaultKeyGenerateStrategy:
      column: id 
      keyGeneratorName: id-key-generator 

    keyGenerators:
      id-key-generator: 
        type: SNOWFLAKE 
    shardingAlgorithms:
      t_order_inline:
        type: INLINE
        props:
          algorithm-expression: t_order_${id % 3 + 1}
      t-order-item-inline:
        type: INLINE
        props:
          algorithm-expression: t_order_item_${id % 3 +1 }
props:
  sql-show: true
  sql-federation-type: ORIGINAL

The database and sql are as follows:

b6fae5eb7c573f5767eb23cf8187c0f

3b0901ef41728fd2f1b45c37ff3ad56

fb530f580fe303a0dc8a634357e78d1


org.springframework.jdbc.UncategorizedSQLException: 

### Error querying database.  Cause: java.sql.SQLException: Unknown exception: At line 0, column 0: Object 't_order' not found

### The error may exist in file [D:\workspace\shardingsphere1\target\classes\mapping\OrderDao.xml]

### The error may involve defaultParameterMap

### The error occurred while setting parameters

### SQL: SELECT * FROM t_order t left join t_order_item t1 on t.id = t1.order_id

### Cause: java.sql.SQLException: Unknown exception: At line 0, column 0: Object 't_order' not found

; uncategorized SQLException; SQL state [HY000]; error code [30000]; Unknown exception: At line 0, column 0: Object 't_order' not found; nested exception is java.sql.SQLException: Unknown exception: At line 0, column 0: Object 't_order' not found

 at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:93)

 at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)

 at com.sun.proxy.$Proxy70.selectList(Unknown Source)

 at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)

 at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147)

 at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)

 at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145)

 at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)

 at com.sun.proxy.$Proxy73.selectTest(Unknown Source)

 at cn.axa.shardingsphere.ShardingsphereApplicationTests.selectTest(ShardingsphereApplicationTests.java:92)

 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

 at java.base/java.lang.reflect.Method.invoke(Method.java:566)

 at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)

 at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)

 at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)

 at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)

 at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)

 at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)

 at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)

 at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)

 at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)

 at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)

 at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)

 at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)

 at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)

 at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)

 at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214)

 at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)

 at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210)

 at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)

 at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)

 at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)

 at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)

 at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)

 at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)

 at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)

 at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)

 at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)

 at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)

 at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)

 at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)

 at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)

 at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)

 at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)

 at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)

 at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)

 at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)

 at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)

 at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)

 at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)

 at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)

 at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)

 at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)

 at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)

 at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)

 at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)

 at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)

 at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)

 at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)

 at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)

 at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)

 at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)

 at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)

Caused by: java.sql.SQLException: Unknown exception: At line 0, column 0: Object 't_order' not found

 at org.apache.shardingsphere.infra.util.exception.external.sql.ShardingSphereSQLException.toSQLException(ShardingSphereSQLException.java:62)

 at org.apache.shardingsphere.dialect.SQLExceptionTransformEngine.toSQLException(SQLExceptionTransformEngine.java:62)

 at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.execute(ShardingSpherePreparedStatement.java:419)

 at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)

 at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java)

 at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)

 at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)

 at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)

 at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)

 at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)

 at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)

 at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89)

 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)

 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)

 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)

 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

 at java.base/java.lang.reflect.Method.invoke(Method.java:566)

 at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)

 ... 77 more

If the table is under public, the query is normal.

RaigorJiang commented 1 year ago

Yes, currently only public schemas are supported.

c1820646795 commented 1 year ago

Yes, currently only public schemas are supported.

When to support schema

deepinsideDrury commented 1 year ago

The latest of springboot starter version support, shardingsphere-jdbc-core 5.4.0 version has same error

dongping8887 commented 1 year ago

We have the same problem

github-actions[bot] commented 8 months ago

There hasn't been any activity on this issue recently, and in order to prioritize active issues, it will be marked as stale.

Basil1991 commented 7 months ago

shardingsphere-jdbc-core 5.4.1 version has same error

strongduanmu commented 7 months ago

You can write test schema in your SQL, just like SELECT * FROM test.t_order

794086163 commented 5 months ago

So are statements that query metadata, such as this pgsql select COLUMN_NAME from information_schema.COLUMNS

terrymanu commented 4 months ago

I cannot understand what is cross library query, can you revise the title and content?

terrymanu commented 4 months ago

I don't think "library" is a concept related to ShardingSphere. Due to the high cost of understanding, please allow me to close this issue.