【问题标题】:Many to Many Relationships with Postgres COPY CommandPostgres COPY 命令的多对多关系
【发布时间】:2015-09-08 00:04:00
【问题描述】:

在运行 Postgres COPY 命令时是否可以包含多对多关系?如果是这样,你能给我举个例子吗?

例如:

CREATE TABLE "lap" (
    "id" serial NOT NULL PRIMARY KEY,
    "Lap_number" integer,
    "Lap_time" interval,
)
;
CREATE TABLE "datasinglerace_Laps" (
    "id" serial NOT NULL PRIMARY KEY,
    "datasinglerace_id" integer NOT NULL,
    "lap_id" integer NOT NULL REFERENCES "lap" ("id") DEFERRABLE INITIALLY DEFERRED,
    UNIQUE ("datasinglerace_id", "lap_id")
)
;
CREATE TABLE "datasinglerace" (
    "id" serial NOT NULL PRIMARY KEY,
    "Notes" text,
)
;
ALTER TABLE "datasinglerace_Laps" ADD CONSTRAINT "datasinglerace_id_refs_id_620382df" FOREIGN KEY ("datasinglerace_id")
  REFERENCES "datasinglerace" ("id") DEFERRABLE INITIALLY DEFERRED;

圈对象已经在数据库中。对于COPY 文件,我想添加datasinglerace id 的信息和我想附加的膝上对象id 的列表。我要附加的圈对象数量不定。

此 SQL 是使用 Django 框架创建的。我想将其保留在 Django 框架中,因此我不想更改 SQL。导入数据真的很慢,所以我正在努力提高导入数据的速度。

【问题讨论】:

    标签: python django postgresql django-orm


    【解决方案1】:

    你可以使用COPY来提高一次性导入批量数据的速度——我不会正常使用它——你隔离瓶颈了吗?你是从什么地方抄来的?您将需要与表结构相同的 CSV 文件之类的文件。

    COPY 直接复制到 PostgreSQL,它与 Django 无关,因此您需要使用 pgsql 或您使用的任何工具与 Postgres 进行交互。您的命令将如下所示:

    COPY datasinglerace FROM datasinglerace.csv;
    COPY datasinglerace_Laps FROM datasinglerace_Laps.csv;
    

    COPY 有很多选项,请参阅documentation

    请注意,任何被其他东西引用的东西都需要先添加,否则您需要放松(删除然后添加回)您的引用约束。在这种情况下,您需要最后COPY datasinglerace_Laps 以便它已经存在的引用

    【讨论】:

    • 我正在处理数据并导入数据库。由于数据集庞大,瓶颈是导入速度。我目前正在使用 Postgres COPY 命令。我正在做一个 COPY,在其中创建 datasinglerace,在另一个 COPY 中,我用对 lap 行和 datasinglerace 行的引用填充表 datasinglerace_Laps。如果我可以使用 COPY 命令创建 datasinglerace 并同时将 m2m 填充到 lap 模型,我怀疑性能会有所提高。
    • 我提到了 Django,因为我现在不考虑改变数据的建模方式,除非它适合 Django ORM。这是一个纯粹的 Postgres 问题。
    • 那么问题出在哪里,只要按照正确的顺序进行 COPY 就应该可以正常工作?
    • 可以,但是太慢了。我需要改进导入时间。
    猜你喜欢
    • 2022-10-17
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2020-05-07
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多