询问:
SELECT string_agg(column_name::text, ',')
FROM information_schema.columns
WHERE table_name = 'my_table' and column_name !='id'
返回my_table中除“ id”以外的列的列表:
date_of_birth,first_name,last_name,e_mail
定义列名称时,我想在INSERT INTO语句中使用此列表。我应该怎么做,因为跟随不起作用。
INSERT INTO my_table2 (
SELECT string_agg(column_name::text, ',')
FROM information_schema.columns
WHERE table_name = 'my_table' and column_name !='id'
)
VALUES ('a', 'b', ...);
我在my_table2和my_table中更改了列数和顺序,因此必须自动分配名称。
你必须使用动态SQL,即从第一个查询的结果构造第二个查询。没有一个方法可以做到这一点。
随着psql
的\gexec
,你可以使用
SELECT format($$INSERT INTO my_table2 (%s) VALUES ('a', 'b', ...)$$,
string_agg(quote_ident(column_name), ', ')
)
FROM information_schema.columns
WHERE table_name = 'my_table'
AND column_name <> 'id' \gexec