首页 > 解决方案 > 您可以将不同结构的数据导入 PostgreSQL 数据库吗?

问题描述

我希望我的措辞正确。

据我了解,SQL 数据必须遵循严格的模式格式

例如

{
  "id": 123,
  "name": "Jesus",
  "middleName": "H.",
  "lastName": "Christ"
}

我导入 SQL 数据库的数据都必须遵循这种格式,对吗?要适应预定义的 SQL 模式?


我问是因为一家初创公司聘请我来修复他们的应用程序。它一直在使用GraphCool它的数据,但该服务已关闭。

他们导出了所有数据,并给了我包含所有数据的文件。

要将曾经进入的数据迁移GraphCoolPrisma 2,首先需要我将数据导入到 PostgreSQL 中。

数据位于几个非常大的文件中。而且它不遵循结构。

例如,在其中一个文件的开头,数据的结构如下:

{
  {
    "valueType": "nodes",
    "values": [
      {
        "tagName": "etc",
        "updatedAt": "etc",
        "_typeName":"etc",
        "id":"etc",
        "createdAt":"etc"
      },
      {
        "tagName": "etc",
        "updatedAt": "etc",
        "_typeName":"etc",
        "id":"etc",
        "createdAt":"etc"
      },
      { ... }

..但后来,在同一个文件中,结构变成了令人费解的混乱:

{
  "tagName":"etc",
  "updatedAt":"etc",
  "_typeName":"etc",
  "id":"etc",
  "createdAt":"etc"
},
{
  "updatedAt":"etc",
  "_typeName":"etc",
  "data": {
    "value": [
      {
        "form_1": {
          "timestamp":"etc",
          "model": {
            "type":"etc",
            "key":"etc",
            "content": {
              "text":"etc",
              "smallKey":"etc",
              "listText":"etc"
            },
...

有没有办法将大块数据(无论结构如何)导入 PostreSQL 数据库?

标签: jsonreactjsdatabasepostgresqlreact-native

解决方案


我不会只是将每个数组元素放入一jsonb列中,

相反,定义一个表,其中包含所有常见和重要属性的适当列,jsonb其余的为:

CREATE TABLE nodes (
   pkey bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
   updatedat timestamp with time zone NOT NULL,
   typename text NOT NULL,
   tagname text,
   createdat timestamp with time zone,
   extra_junk jsonb
);

这将允许您保留复杂的 JSON 混乱(减去普通属性,因为数据重复很糟糕),而您有常用属性的普通列,特别是那些您想在 SQL 语句中使用的属性。

如果没有一个属性对您的数据库处理很重要,您当然可以将整个数组元素放入jsonb. 在此上下文中,“重要”是用于查询、约束等的属性。如果您知道 SQL 语句,您就可以弄清楚这些。努力仅将 JSON 用于那些只是数据库“有效负载”的部分。


推荐阅读