如何从其他(Postgres)数据库加载内存数据库中的数据?

Posted

技术标签:

【中文标题】如何从其他(Postgres)数据库加载内存数据库中的数据?【英文标题】:How to load data in in-memory database from other (Postgres) database? 【发布时间】:2021-07-21 19:43:31 【问题描述】:

我想将 Postgres 数据库中的表中的数据加载到内存 H2 数据库中。我们在 H2(或任何其他)内存数据库中有这样的功能吗?我正在使用spring boot和hibernate。

我为什么要这样做

对于我们的应用程序,我们需要快速的检索时间,因此我们将使用内存中的数据库作为缓存,并避免每次 API 调用的数据库之旅。我们将在应用程序启动时从实际的 postgres 数据库加载缓存,然后每个 API 调用都会从缓存中读取数据。我们会定期从 postgres 数据库中刷新缓存。

【问题讨论】:

可以使用多个数据源,但您为什么要这样做?我建议将您的开发数据与测试/产品数据分开。不要混合它们..拜托。如果你不混合它们,你也可以避免复杂性。 @AjayKumar 更新了问题(与开发/生产环境无关)。 【参考方案1】:

您可以在H2数据库中创建linked table

CREATE LINKED TABLE EXTERNAL_TABLE_NAME('',
    'jdbc:postgressql:…', 'user', 'password', 'tableNameInPostgreSQL');

您可以直接使用此链接表,但所有操作都将重定向到 PostgreSQL,并且可能相对较慢。

如果您希望可以在 H2 中使用链接表中的数据副本创建一个普通表:

CREATE TABLE OWN_TABLE_NAME AS TABLE EXTERNAL_TABLE_NAME;

之后不再需要链接表,可以删除:

DROP TABLE EXTERNAL_TABLE_NAME;

此命令只会删除链接,不会删除PostgreSQL数据库中的真实表。

【讨论】:

以上是关于如何从其他(Postgres)数据库加载内存数据库中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从公共服务器 postgres 数据库将数据源加载到网关?

如何将 foodmart 数据库加载到 postgres

无法使用 JDBCSinkConnector 将数据从 Kafka 主题加载到 Postgres

将大量数据从 DataFlow 加载到外部 postgres 数据库的最佳方法是啥?

从 Java 中的 Postgres 加载非物化数组

从Java中的Postgres加载非物化数组