将远程 PostgreSQL 数据库连接到本地 Java 应用程序:实用指南
在本地开发过程中从外部数据库访问数据是一个常见的挑战。 本文详细介绍了使用 PostgreSQL 外部数据包装器 (FDW) 和 Fly Proxy 将本地 Java API(使用 SpringBoot)连接到 Fly.io 上托管的远程 PostgreSQL 数据库的解决方案。
问题:弥合差距
该项目需要从位于 Fly.io 托管应用程序上的 PostgreSQL 表中获取数据。由于网络限制,从本地开发环境的直接访问被阻止。 这带来了两个关键障碍:
解决方案:Fly Proxy 和 PostgreSQL FDW
该解决方案利用 Fly Proxy 创建安全隧道和 PostgreSQL FDW 将远程数据库视为本地数据源。
了解 PostgreSQL FDW
PostgreSQL 的外部数据包装器 (FDW) 允许查询外部数据源,就好像它们是本地数据源一样。 postgres_fdw
扩展促进了这种连接。
设置 Fly 代理
开始之前,请确保已安装flyctl
。 Fly Proxy 创建安全隧道。命令结构为:
<code class="language-bash">fly proxy <remote> [remote_host] [flags]</code>
对于这种情况,命令类似于:
<code class="language-bash">fly proxy 5433:5432 -a db_app_name</code>
这会建立一个到 Fly.io 数据库 (db_app_name
) 的本地隧道(端口 5433)。
配置 PostgreSQL FDW
安装扩展: 在本地 PostgreSQL 数据库中安装 postgres_fdw
:
<code class="language-sql">CREATE EXTENSION IF NOT EXISTS postgres_fdw;</code>
创建外部服务器:定义与远程数据库的连接:
<code class="language-sql">CREATE SERVER fly_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS ( host '127.0.0.1', port '5433', dbname 'db_name' );</code>
映射用户: 创建用户映射以授予访问权限:
<code class="language-sql">CREATE USER MAPPING FOR local_user SERVER fly_server OPTIONS ( user 'remote_user', password 'remote_password' );</code>
导入外部表:导入必要的远程表:
<code class="language-sql">IMPORT FOREIGN SCHEMA foreign_schema_name LIMIT TO (remote_table) FROM SERVER fly_server INTO local_schema_name;</code>
(注意:如果远程表依赖于 ENUM 类型,则这些类型也必须在本地创建。)
物化视图(可选):对于读取密集型操作,物化视图可以提高性能。
与 Java API 集成
配置 FDW 和代理后,SpringBoot 应用程序可以通过本地数据库连接,使用外部表或物化视图查询外部数据。
要点
结论
该方法成功地将远程数据集成到本地Java应用程序中,为管理分布式数据提供了灵活的解决方案。 考虑使用 FDW 来应对类似的挑战! 在 LinkedIn 上连接以进行进一步讨论。
<code class="language-bash">fly proxy <remote> [remote_host] [flags]</code>
以上是本地开发,远程数据:从 Java API 访问 Fly.io PostgreSQL的详细内容。更多信息请关注PHP中文网其他相关文章!