json - 您可以将不同结构的数据导入 PostgreSQL 数据库吗?
问题描述
我希望我的措辞正确。
据我了解,SQL 数据必须遵循严格的模式格式
例如
{
"id": 123,
"name": "Jesus",
"middleName": "H.",
"lastName": "Christ"
}
我导入 SQL 数据库的数据都必须遵循这种格式,对吗?要适应预定义的 SQL 模式?
我问是因为一家初创公司聘请我来修复他们的应用程序。它一直在使用GraphCool
它的数据,但该服务已关闭。
他们导出了所有数据,并给了我包含所有数据的文件。
要将曾经进入的数据迁移GraphCool
到Prisma 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 数据库?
解决方案
我不会只是将每个数组元素放入一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 用于那些只是数据库“有效负载”的部分。
推荐阅读
- flutter - 如何更改文本字段颤动中的值?
- spring - 原因:java.io.FileNotFoundException:类路径资源 [csv/users.csv] 无法解析为 URL,因为它不存在
- c# - 从 x,y 位置统一显示 2D 形状的最佳方式
- javascript - 我应该设置服务器还是使用 Firebase?
- php - laravel foreach循环中的多个变量
- android - 如何在 Recyclerview OnScroll 上隐藏 TabLayout 而不是 Toolbar?
- javascript - 代码不输出到屏幕
- android - notifyDataSetChanged() 不适用于 FirebaseRecyclerAdapter
- python - 为什么 scipy 中的高斯滤波器的这种顺序会给出 x 和 y 导数?
- android - Android Mediarecorder setNextOutputFile IllegalStateException