Postgresql Firebase:如何读取外部数据库?

Postgresql Firebase:如何读取外部数据库?,postgresql,firebase,firebase-realtime-database,Postgresql,Firebase,Firebase Realtime Database,我在另一台服务器上的PostgreSQL中有一些数据,我需要读取这些数据以包含在Firebase应用程序中,然后呈现图表。我只有db连接字符串,那里没有用于返回该数据的端点 我将限制在Firebase上使用auth和角色向admin输入连接字符串 然后我需要一种Firebase应用程序用SQL获取数据并在客户端显示的方法,它将呈现表格和图表 用户永远不能看到连接字符串,即使在网络流量中也是如此 这是否可行以及如何实现?Firebase没有“与PostgreSQL同步”API 因此,要么你的应

我在另一台服务器上的PostgreSQL中有一些数据,我需要读取这些数据以包含在Firebase应用程序中,然后呈现图表。我只有db连接字符串,那里没有用于返回该数据的端点

  • 我将限制在Firebase上使用auth和角色向admin输入连接字符串

  • 然后我需要一种Firebase应用程序用SQL获取数据并在客户端显示的方法,它将呈现表格和图表

  • 用户永远不能看到连接字符串,即使在网络流量中也是如此

这是否可行以及如何实现?

Firebase没有“与PostgreSQL同步”API

因此,要么你的应用程序需要这样做(意味着它可以访问PostgreSQL和Firebase数据库),要么你需要设置一个服务器来实现这一点

由于您已经规定应用程序无法知道PostgreSQL连接字符串,因此只能在服务器上(或普通用户无权访问的其他地方)执行此操作


除此之外,这一情景还极其广泛。有很多很多方法可以实现它。

我有一个类似的问题需要解决,作为一个临时解决方案,我使用firebase admin serviceAccount初始化了应用程序。然后在我的服务器上监听firebase集合的更改,并在收到新值时插入\更新PostgreSQL中的值

将应用程序初始化为管理员并侦听firebase上的更改:

  admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: 'https://yourfirebaseproject.firebaseio.com',
  });

  const db = admin.database();

  db.ref('User').on('value', async (snapshot) => {
    insertOrUpdate(User, 'users', snapshot.val());
  });
在PostgreSQL中插入\更新数据:

const insertOrUpdate = (model, tableName, data) => {
  const firstData = data[0] ? data[0] : data;

  return model.knex().raw(
    knex(tableName).insert(data).toQuery() + ' ON CONFLICT ("id") DO UPDATE SET ' +
      Object.keys(firstData).map((field) => `${field}=EXCLUDED.${field}`).join(', ')
  );
};

问题是Firebase没有服务器代码的选项。那样的话就容易了。现在似乎不可能了。我们知道,允许您在Firebase的服务器上运行代码将允许更多的人在不需要服务器的情况下实现他们的用例。我还从经验中了解到,大多数开发人员高估了运行需要提升权限的代码(比如您的代码)的意义。它可以是一个小小的虚拟机/容器,一个你家里的盒子,我经常开玩笑说它甚至可以是你自己的Android手机。在本例中,客户端和服务应用程序之间的区别在于,其中一个是您的Android手机,另一个是我的Android手机“。这是关于信任,而不是关于计算能力。这里的问题是你为什么要这么做?”?您已经在SQL数据库中获得了数据,可以生成表和图表。a) 为什么要将该数据移动到Firebase。。。i、 e.优势/用例是什么。b) 您是否有将SQL表重构为JSON对象的计划?是否考虑加入或其他SQL函数(搜索等)。@Jay我想在Firebase上构建一个面向客户端的应用程序,在那里他们可以注册,每个客户都做某些事情,其中包括在表和图表中查看Postgres中的数据。所以我会使用Firebase的NoSQL进行所有操作,除了已经在PG上的那部分数据。好的,所以您不需要将任何SQL数据从SQL迁移到Firebase。如果我理解正确,您只需要查看图表中的结果数据。由于我们不知道“db连接字符串”是什么,而且也不知道结果数据集存储的内容/位置/方式,因此情况变得有点空洞。它可以作为平面文件下载,也可以存储在另一个SQL表中。我认为您需要使用更多数据来增强您的问题,以真正理解scope.DB连接字符串的标准格式用户名:password@host:port/dbname。数据作为任何其他数据存储在表中,可以通过SQL或某些适配器、ORM等进行检索。由于Firebase没有服务器端代码,您将无法直接让Firebase获取SQL数据-它必须通过客户端。您可以加密网络字符串,但这没有帮助,因为客户端仍必须连接到SQL server。在Firebase中存储数据而不使用SQL server怎么样?