我想给一个具有PostgreSQL数据库100%离线功能的webapply.在理想情况下,每个用户都应该在浏览器中完全复制数据库,并在联机时进行同步.这样就可以使用相同的代码与离线和在线数据库进行通信.我知道这在PockDB和CouchDB中是可能的,但还没有找到一个可以与PostgreSQL一起使用的解决方案.这有可能吗?

推荐答案

简短回答:我不知道现在有这样的事情存在.

然而,从理论上讲,这是可行的...(长长的回答:)

  1. levelup编写一个PostgreSQL后端(一个用于MySQL:https://github.com/kesla/mysqldown)
  2. 使用PockDB现有的leveldb适配器(必须配置为使用postgres后端),从PostgreSQL数据库连接pouch-server个读/写端口.恭喜你,你现在可以使用PockDB同步数据了!

像这样的方法在实际应用中是否实用,这是另一个你必须回答的问题.

例如,您可能会想,"我能用这种方法将一个现有的复杂模式和多个表同步到客户端吗?"答案可能不是这样的——leveldown的mysqldown实现使用一个带有三个字段的MySQL表:idkeyvalue(source),我想任何通用的PostgreSQL适配器都会是类似的(不过没有任何东西说你不能只为你的应用做一个专用适配器!).

另一方面,如果要在现有数据库模式上实现与couchdb兼容的API(或子集,例如,您可能不需要附件),那么没有什么可以阻止您在客户端上使用PockDB直接与之对话,就像它是一个实际的couchdb一样——只需打开URL并调用replicate()!实现复制协议可能是一项相当大的工作,因为您需要在某个地方跟踪修订等内容——但从技术上讲,这并非不可能!

还有一些levelup后端存储的实现是为浏览器设计的.参见level.js,这可能是服务器端Postgres levelup后端和浏览器之间同步的另一种方式.


TL;DR:目前围绕Javascript数据库正在做大量工作.与博士后同步是不可能的吗?可能不会.会有很多工作吗?肯定值得的?谁知道呢,但那会很酷.

Postgresql相关问答推荐

将几个左连接合并为一个

PostgreSQL按描述请求

为什么在PostgreSQL中CPU_INDEX_TUPLE_COST与CPU_TUPLE_COST不同

无法继承BYPASSRLS

使用PythonPolar在PostgreSQL中存储

无法使用PGx连接到Postgres数据库AWS RDS

使用 WHERE 子句创建递归视图

在 postgres/presto/AWS-Athena 中,与 array_agg( (col1, col2) ) 相反的是什么来获得每组多行?

使用 GDB 调试器调试 AGE 代码的过程

Postgres 将分区附加到表的时间太长.想明白为什么

是否可以短时间运行 VACUUM FULL 并获得一些好处?

Postgres 14 反斜杠 Z 没有给出正确的输出

将 postgres 从属提升为主 node

Postgres内部如何计算月份间隔

使用 postgres regexp_replace 将字符串列表替换为始终相同的字符串

如何在 psql 控制台中打印当前工作目录?

Postgres 类似于 SQL Server 中的 CROSS APPLY

使用 PostgreSQL 的 Linq To Sql

PostgreSQL 多种认证方式

在 Select (PostgreSQL/pgAdmin) 中将布尔值返回为 TRUE 或 FALSE