DBeaver在导入/导出时不保留主键。

16

我正在使用DBeaver将数据从Postgres迁移到Derby。当我使用DBeaver中的向导直接从一个表转到另一个表时,Derby中的主键被生成而不是插入。这会在后续表的外键上引起问题。

如果我生成SQL语句,主键将成为SQL语句的一部分并被正确插入。但是以这种方式处理太多行了。

是否有一种方法可以让DBeaver在直接导入/导出数据库表时插入主键而不是让其生成?

目标表模式

CREATE TABLE APP.THREE_PHASE_MOTOR (
    ID BIGINT NOT NULL DEFAULT GENERATED_BY_DEFAULT,
    VERSION INTEGER NOT NULL,
    CONSTRAINT SQL130812103636700 PRIMARY KEY (ID)
);

CREATE INDEX SQL160416184259290 ON APP.THREE_PHASE_MOTOR (ID);

源表的架构

CREATE TABLE public.three_phase_motor (
    id int8 NOT NULL DEFAULT nextval('three_phase_motor_id_seq'::regclass),
    "version" int4 NOT NULL,
    CONSTRAINT three_phase_motor_pkey PRIMARY KEY (id)
)
WITH (
    OIDS=FALSE
);
3个回答

20

3
它不能工作。没有索引,也没有主键,也没有外键。 - realtebo

19

我发现一个在6.0.5版本上可行的技巧,按照以下步骤进行:

  • 双击表名
  • 然后选择Data选项卡
  • 然后单击灰色表角(顶部行号旁边的角)以选择所有行
  • 然后右键单击相同的灰色表角
  • 然后选择Generate SQL -> INSERT菜单

将弹出一个包含id(主键)的INSERT指令窗口。

注意:当选择一部分行时,同样的菜单也适用于这些行。

输入图像描述


2
我可以确认在DBeaver 21.0.0中仍然有效。 - Arthur
1
请记得在数据选项卡底部更改获取的行数并刷新。否则你可能会错过一些数据。 - Arthur

5
截至目前,DBeaver版本[22.0.5]中,您需要选择将“包括生成的列”设置为true,如下图所示,这将导出主键/生成的列。

DBeaver selecting primary/generated columns [22.0.5]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接