当INSERT的表达式多于目标列

时间:2016-12-21 11:01:58

标签: postgresql

我有一个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插入它们共有的列中的数据?

1 个答案:

答案 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