我有一个名为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字段不应包含任何数据。
任何有关此的帮助将不胜感激。谢谢。
答案 0 :(得分:2)
您可以在mycopy
表格中指定要插入field2
和field3
的列:
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语句列相同的顺序定义要插入的列名。