创建表,复制没有数据的字段,然后复制下一个字段中的数据

时间:2018-03-21 01:56:26

标签: sql postgresql

我有一个名为mytable的表,它有四个字段(id,field2,field3,field4)。

我想创建一个名为tablecopy的表,它将从mytable中获取组件。在一个字段中,我想通过mytable复制列名和pk约束。然后在tablecopy的其他字段中,我想从mytable(带有数据)复制'field2'和'field3'。

这是我正在使用的内容。

CREATE TABLE mycopy (LIKE mytable INCLUDING ALL);

INSERT INTO mycopy
SELECT field2, field3 FROM mytable;

问题是field2是一个变化的角色,它试图把它放在我的id字段中。我希望下一列中的field2来自id。该id字段不应包含任何数据。

任何有关此的帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:2)

您可以在mycopy表格中指定要插入field2field3的列:

INSERT INTO mycopy (field2, field3)
SELECT field2, field3
FROM mytable;

由于多种原因,这是执行INSERT INTO ... SELECT的首选方式。即使您没有指定目标列,稍后如果表结构发生变化,或者有人真空,脚本可能会突然停止工作。此外,通过明确指定目标列,您可以向其他任何继承您代码的人清楚说明。

修改:如果您希望Postgres自动填充Id表格中的mycopy列,那么您的表格定义应如下所示:

CREATE TABLE mycopy (
    Id  SERIAL PRIMARY KEY,
    field1 TEXT NOT NULL,
    field2 TEXT NOT NULL,
    field3 TEXT NOT NULL
);

现在,Postgres会在您插入数据时自动增加Id列。

答案 1 :(得分:0)

  <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.297</version>
  </dependency>

您需要按照与select语句列相同的顺序定义要插入的列名。