我有一个Postgreql表(第一个表):
CREATE TABLE public.getxo_todoseniales_hv
(
id numeric(8,0),
"GEOMETRY" geometry,
"Comentario" character varying,
"Codigo" character varying,
"Leyenda" character varying,
"FechaImpla" date,
"FechaCambi" date,
"FechaRetir" date,
rotacion numeric,
variacion numeric(10,0),
fecha_mecanizacion timestamp without time zone,
usuario_mecanizacion character varying,
tipo_variacion character varying,
variacion_posterior numeric(10,0),
CONSTRAINT getxo_todoseniales_hv_id_key UNIQUE (id, variacion)
)
WITH (
OIDS=TRUE
);
我有另一张桌子(第二张桌子):
CREATE TABLE public.getxo_todoseniales_borrar
(
id numeric(8,0),
"GEOMETRY" geometry,
"Comentario" character varying,
"Codigo" character varying,
"Leyenda" character varying,
"FechaImpla" date,
"FechaCambi" date,
"FechaRetir" date,
rotacion numeric,
CONSTRAINT getxo_todoseniales_hv_id_key UNIQUE (id, variacion)
)
WITH (
OIDS=TRUE
);
好的,请注意第二个表除了最后5个字段外都有相同的字段。
现在我想将第一个表中的所有行插入到第二个表中,而不必逐个指定列。我将不得不在PL / SQL函数中执行此查询,并且它将用于许多表格,这些字段对我来说是不可知的。唯一不变的是第一个表将具有相同的列,除了最后五个列(在第二个表上我不需要它们)。
我试过了:
INSERT INTO getxo_todoseniales_borrar (SELECT * FROM getxo_todoseniales_hv);
但正如预期的那样,我得到了错误:
Insert has more expressions than target columns
有没有办法强制postgresql插入它们共有的列中的数据?
答案 0 :(得分:1)
您可以使用此语法找到列名
select string_agg(column_name,',') from information_schema.columns
where table_name = 'table_name' limit ((select count(*) from table_name)-5) ;
现在您可以找到列名,分隔值。 之后,您运行语法。
insert into table_name select column_name from table_name