与Postgres的多对多关系COPY Command

时间:2015-09-08 00:04:01

标签: python django postgresql django-orm

运行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。导入数据的速度非常慢,因此我正在努力提高导入数据的速度。

1 个答案:

答案 0 :(得分:0)

您可以使用COPY来提高一次性导入批量数据的速度 - 我不会正常使用它 - 您是否已将瓶颈隔离?你在复制什么?您需要具有与表格相同结构的CSV文件。

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

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

COPY有很多选项,请参阅documentation

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