gpt4 book ai didi

postgresql - 在不指定列的情况下插入记录时自动递增字段出错

转载 作者:行者123 更新时间:2023-11-29 13:26:25 25 4
gpt4 key购买 nike

我们正在从 SQL Server 转换到 Postgres。我有一个要适应的场景。它涉及将记录从一个表插入另一个表,而不列出所有列。我意识到这不是推荐的做法,但让我们暂时搁置它。

drop table if exists pk_test_table;

create table public.pk_test_table
(
recordid SERIAL PRIMARY KEY NOT NULL,
name text
);

--example 1: works and will insert a record with an id of 1
insert into pk_test_table values(default,'puppies');

--example 2: fails
insert into pk_test_table
select first_name from person_test;

我在第二个例子中收到的错误:

column "recordid" is of type integer but expression is of type character varying Hint: You will need to rewrite or cast the expression.

default 关键字将告诉数据库获取下一个值。
有没有办法在第二个例子中使用这个关键字?或者通过某种方式告诉数据库忽略自动递增的列并像往常一样填充它们?
我宁愿使用子查询来获取下一个“id”。
此功能在 SQL Server 中有效,因此是个问题。
预先感谢您的帮助!

最佳答案

如果您不能列出列名,您应该使用 DEFAULT 关键字,就像您在简单插入示例中所做的那样。这不适用于 insert into ... select ...

为此,您需要调用 nextval。不需要子查询,只需:

insert into pk_test_table
select nextval('pk_test_table_id_seq'), first_name from person_test;

您确实需要知道序列名称。您可以根据表名从 information_schema 获取它并推断其主键,使用仅将表名作为参数的函数。这会很丑陋,但它会起作用。我认为不需要知道表名就没有任何办法。

关于postgresql - 在不指定列的情况下插入记录时自动递增字段出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33111982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com