postgres数据库因为模式原因查询不到数据

背景

我在同一个数据库里面创建了两个模式(一个public,默认模式存放真实数据,一个备份模式没有数据,只有结构),数据 库表相同,然后在写sql的时候没有指定模式名。
查询没有返回结果。
截图

解决

指定模式名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Flink 流处理中关联查询 Postgres 数据库中的数据,可以使用 Flink 的 Async I/O API 和对应的 Postgres 异步 I/O 适配器实现。 具体来说,可以按照以下步骤操作: 1. 在项目中添加 PostgreSQL JDBC 驱动和对应的异步 I/O 适配器,例如: ```xml <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.12</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc-postgres-async</artifactId> <version>1.13.0</version> </dependency> ``` 2. 实现 AsyncFunction 接口,并在 asyncInvoke 方法中编写从 PostgreSQL查询数据的逻辑,例如: ```java public class PostgresAsyncFunction extends RichAsyncFunction<Integer, String> { private final String url; private final String username; private final String password; private final String query; private transient Connection connection; private transient PreparedStatement statement; public PostgresAsyncFunction(String url, String username, String password, String query) { this.url = url; this.username = username; this.password = password; this.query = query; } @Override public void open(Configuration parameters) throws Exception { super.open(parameters); connection = DriverManager.getConnection(url, username, password); statement = connection.prepareStatement(query); } @Override public void close() throws Exception { super.close(); if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } @Override public void asyncInvoke(Integer key, ResultFuture<String> resultFuture) throws Exception { statement.setInt(1, key); ResultSet rs = statement.executeQuery(); while (rs.next()) { String value = rs.getString(1); resultFuture.complete(Collections.singleton(value)); } } } ``` 在这个例子中,我们使用 JDBC 连接 PostgreSQL 数据库,并执行指定的查询语句,将查询结果发送到异步回调函数中,最后通过 ResultFuture 将结果传递给下游算子。 3. 在 Flink 程序中使用 Async I/O API 和 PostgresAsyncFunction 实现关联查询,例如: ```java String url = "jdbc:postgresql://localhost:5432/mydb"; String username = "myuser"; String password = "mypassword"; String query = "SELECT name FROM products WHERE id = ?"; DataStream<Integer> stream = ...; // 从数据源读取数据 DataStream<String> result = AsyncDataStream .unorderedWait(stream, new PostgresAsyncFunction(url, username, password, query), 1000L, TimeUnit.MILLISECONDS, 100); ``` 在这个例子中,我们使用 AsyncDataStream.unorderedWait 方法将数据流和 PostgresAsyncFunction 关联起来,最后得到关联查询后的结果数据流。其中,1000L 和 TimeUnit.MILLISECONDS 表示异步等待时间,即等待 Postgres 查询结果的最大时间,100 表示并发请求数量,即可以一次异步查询多少条数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值