Postgresql 自动增量在 Ubuntu 中不起作用
Postgresql auto-increment is not working in Ubuntu
我有以下 table 称为 work_expenses:
Table "public.work_expenses"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------------------+---------+-----------+----------+--------------------------------------------------------+----------+--------------+-------------
work_expensesid | integer | | not null | nextval('work_expenses_work_expensesid_seq'::regclass) | plain | |
workid | integer | | | | plain | |
employeeid | integer | | | | plain | |
date_linkid | integer | | | | plain | |
expense_categoryid | integer | | | | plain | |
cost_incl_gst | numeric | | | | main | |
note | text | | | | extended | |
Indexes:
"work_expenses_pkey" PRIMARY KEY, btree (work_expensesid)
Foreign-key constraints:
"work_expenses_date_linkid_fkey" FOREIGN KEY (date_linkid) REFERENCES date_link(date_linkid)
"work_expenses_employeeid_fkey" FOREIGN KEY (employeeid) REFERENCES employee(employeeid)
"work_expenses_expense_categoryid_fkey" FOREIGN KEY (expense_categoryid) REFERENCES expense_category(expense_categoryid)
"work_expenses_workid_fkey" FOREIGN KEY (workid) REFERENCES work(workid)
当我插入数据而不输入 work_expensesid 时,它应该会自动递增,但它不会。改为使用以下 INSERT 命令:
INSERT INTO work_expenses (work_expensesid,workid,employeeid,date_linkid,expense_categoryid,cost_incl_gst,note)
VALUES
(NULL,1,220,4,5.00,NULL),
(NULL,1,220,5,33.75,NULL),
(631,1,218,13,21.50,'trailer load of tree branches')
;
我收到如下错误信息:
ERROR: INSERT has more target columns than expressions
LINE 1: ...mployeeid,date_linkid,expense_categoryid,cost_incl_gst,note)
^
所有其他 table 都存在这个问题。有人可以指出我正确的方向吗?我想要实现的是,我以后每次输入记录时都不需要提供新的序列号。 table 目前有 365 条记录,这些记录是通过提供唯一的 work_expensesid 输入的。
附加信息:
Sequence "public.work_expenses_work_expensesid_seq"
Type | Start | Minimum | Maximum | Increment | Cycles? | Cache
---------+-------+---------+------------+-----------+---------+-------
integer | 1 | 1 | 2147483647 | 1 | no | 1
Owned by: public.work_expenses.work_expensesid
Schema | Name | Type | Owner | Size | Description
--------+-----------------------------------+----------+----------+------------+-------------
public | work_expenses_work_expensesid_seq | sequence | postgres | 8192 bytes |
crewdb=# select count(*) from work_expenses;
count
-------
365
(1 row)
INSERT has more target columns than expressions
这只是意味着您需要从插入目标列表中删除列 work_expensesid
:
INSERT INTO work_expenses
(workid,employeeid,date_linkid,expense_categoryid,cost_incl_gst,note)
VALUES
(NULL, 1,220,4,5.00,NULL),
(NULL, 1,220,5,33.75,NULL),
(631, 1,218,13,21.50,'trailer load of tree branches');
现在建议为此使用标识列:
create table work_expenses
(
work_expensesid integer not null generated always as identity primary key,
workid integer,
employeeid integer,
date_linkid integer,
expense_categoryid integer,
cost_incl_gst numeric,
note text
)
我有以下 table 称为 work_expenses:
Table "public.work_expenses"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------------------+---------+-----------+----------+--------------------------------------------------------+----------+--------------+-------------
work_expensesid | integer | | not null | nextval('work_expenses_work_expensesid_seq'::regclass) | plain | |
workid | integer | | | | plain | |
employeeid | integer | | | | plain | |
date_linkid | integer | | | | plain | |
expense_categoryid | integer | | | | plain | |
cost_incl_gst | numeric | | | | main | |
note | text | | | | extended | |
Indexes:
"work_expenses_pkey" PRIMARY KEY, btree (work_expensesid)
Foreign-key constraints:
"work_expenses_date_linkid_fkey" FOREIGN KEY (date_linkid) REFERENCES date_link(date_linkid)
"work_expenses_employeeid_fkey" FOREIGN KEY (employeeid) REFERENCES employee(employeeid)
"work_expenses_expense_categoryid_fkey" FOREIGN KEY (expense_categoryid) REFERENCES expense_category(expense_categoryid)
"work_expenses_workid_fkey" FOREIGN KEY (workid) REFERENCES work(workid)
当我插入数据而不输入 work_expensesid 时,它应该会自动递增,但它不会。改为使用以下 INSERT 命令:
INSERT INTO work_expenses (work_expensesid,workid,employeeid,date_linkid,expense_categoryid,cost_incl_gst,note)
VALUES
(NULL,1,220,4,5.00,NULL),
(NULL,1,220,5,33.75,NULL),
(631,1,218,13,21.50,'trailer load of tree branches')
;
我收到如下错误信息:
ERROR: INSERT has more target columns than expressions
LINE 1: ...mployeeid,date_linkid,expense_categoryid,cost_incl_gst,note)
^
所有其他 table 都存在这个问题。有人可以指出我正确的方向吗?我想要实现的是,我以后每次输入记录时都不需要提供新的序列号。 table 目前有 365 条记录,这些记录是通过提供唯一的 work_expensesid 输入的。 附加信息:
Sequence "public.work_expenses_work_expensesid_seq"
Type | Start | Minimum | Maximum | Increment | Cycles? | Cache
---------+-------+---------+------------+-----------+---------+-------
integer | 1 | 1 | 2147483647 | 1 | no | 1
Owned by: public.work_expenses.work_expensesid
Schema | Name | Type | Owner | Size | Description
--------+-----------------------------------+----------+----------+------------+-------------
public | work_expenses_work_expensesid_seq | sequence | postgres | 8192 bytes |
crewdb=# select count(*) from work_expenses;
count
-------
365
(1 row)
INSERT has more target columns than expressions
这只是意味着您需要从插入目标列表中删除列 work_expensesid
:
INSERT INTO work_expenses
(workid,employeeid,date_linkid,expense_categoryid,cost_incl_gst,note)
VALUES
(NULL, 1,220,4,5.00,NULL),
(NULL, 1,220,5,33.75,NULL),
(631, 1,218,13,21.50,'trailer load of tree branches');
现在建议为此使用标识列:
create table work_expenses
(
work_expensesid integer not null generated always as identity primary key,
workid integer,
employeeid integer,
date_linkid integer,
expense_categoryid integer,
cost_incl_gst numeric,
note text
)