postgres使用生成的列

时间:2018-03-14 19:01:43

标签: sql postgresql

假设我有这段数据(实际上每隔几秒大约有5,000个条目,最初是数据转储中的50,000个):

[
  "person": {
    "name": "Johnny Bravo",
    "location": {
      "zipcode": 11111,
      "address": "1 Second Ave"
    },
    "phone_numbers": [ 15007774321, 12227435432 ]
  }
]

和这个架构:

CREATE TABLE person(
  id serial PRIMARY KEY,
  name varchar(255) UNIQUE,
  location_id integer NOT NULL REFERENCES location(id)
)
CREATE TABLE location(
  id serial PRIMARY KEY,
  zipcode integer NOT NULL,
  address varchar(255) NOT NULL
)
CREATE TABLE phone_number(
  id serial PRIMARY KEY,
  "number" integer NOT NULL
)
CREATE TABLE person_number_relationship(
  id serial PRIMARY KEY,
  phone_number_id integer NOT NULL REFERENCES phone_number(id),
  person_id integer NOT NULL REFERENCES person(id)
)

这是过于简单化但重要的部分在这里。目前要插入此数据,我使用访问数据库(scala)的语言来完成大部分工作。

  1. 插入所有位置,然后选择所有位置(2个查询)
  2. 将位置替换为人员列表中的位置ID
  3. 插入电话号码,然后选择所有电话号码(2个查询)
  4. 创建一个电话号码为id的地图
  5. 插入人员列表,然后选择人员ID和姓名(2个查询)
  6. 创建人名为id的地图
  7. 从phone_numbers列表和人员地图中创建person_id,phone_number_id的新列表
  8. 插入新列表(1个查询)
  9. 我提出的问题可以分为两部分:

    1. 如何插入两个表,其中一个表需要另一个表生成的ID?
    2. 如何在插入时生成ID时,如何为两个表插入多对多的关系?
    3. 理想情况下,我想将所有这些逻辑推送到数据库,在那里我不会浪费内存在驱动程序和数据库之间发送额外信息

0 个答案:

没有答案