我正在尝试创建一个带有插入和更新规则的 postgresql 表,使用户可以自动插入信息或更新数据库表上的现有信息。当我尝试在数据库中运行 SQL 查询以创建表时,我不断收到此错误。我尝试按照 PostgreSQL 9.1 中的文档步骤进行操作。它不断给我一个主键的表达式错误,说明我需要重新编写它。请有人可以看看这个脚本并帮助我。感谢您最宝贵的贡献!
这是我的 SQL 脚本
CREATE TABLE fieldtally1
(fieldtally1_id serial NOT NULL,
pipeno character varying,
wthick real,
heatno1 character varying(32),
pipeno2 character varying(32),
heatno2 character varying(32),
Djointno character varying(32),
ContractorNo character varying(32),
measuredlength double precision,
serialno character varying(32),
CoatingType character varying(32),
coatingno character varying(32),
mnfcno character varying(32),
FactoryLength double precision,
pipeod_in numeric,
pipeod_mm numeric,
pipeweight double precision,
pipegrade numeric,
loadtally numeric,
dateweilded date,
datereceived date,
dataenteredby character varying(50),
deliveryno character varying(50),
manufacturer character varying(50),
Remarks character varying(100),
ManualUser character varying(100),
log_when timestamp,
CONSTRAINT fieldtally1_pkey PRIMARY KEY (fieldtally1_id, pipeno)
);
Create rule fieldtally1_ins as on INSERT to fieldtally1
Do Instead
Insert into fieldtally1 values (
New.pipeno,
New.wthick,
New.heatno1,
New.pipeno2,
New.heatno2,
New.Djointno,
New.ContractorNo,
New.measuredlength,
New.serialno,
New.coatingtype,
New.coatingno,
New.mnfcno,
New.factorylength,
New.pipeod_in,
New.pipeod_mm,
New.pipeweight,
New.pipegrade,
New.ManualUser,
current_timestamp
);
CREATE RULE fieldtally1_upd AS ON UPDATE TO fieldtally1
DO INSTEAD
UPDATE fieldtally1
SET PIPENO = New.pipeno,
wthick = New.wthick,
heatno1 = New.heatno1,
pipeno2 = New.pipeno2,
heatno2 = New.heatno2,
Djointno = New.Djointno,
ContractorNo = New.ContractorNo,
measuredlength = New.measuredlength,
New.serialno = New.serialno,
coatingtype = New.coatingtype,
coatingno = New.coatingno,
mnfcno = New.mnfcno,
factorylength = New.factorylength,
pipeod_in = New.pipeod_in,
pipeod_mm = New.pipeod_mm,
pipeweight = New.pipeweight,
pipegrade = New.pipegrade,
ManualUser = New.ManualUser
WHERE pipeno = OLD.pipeno;
CREATE RULE fieldtally1_del AS ON DELETE TO fieldtally1
DO INSTEAD
DELETE FROM fieldtally1
WHERE pipeno = OLD.pipeno;
这是我运行脚本时遇到的错误
注意:CREATE TABLE 将为串行列“fieldtally1.fieldtally1_id”创建隐式序列“fieldtally1_fieldtally1_id_seq”注意:CREATE TABLE / PRIMARY KEY 将为表“fieldtally1”创建隐式索引“fieldtally1_pkey”错误:列“fieldtally1_id”是整数类型,但表达式是字符类型不同的第 34 行:New.pipeno,^ 提示:您将需要重写或强制转换表达式。
***错误** *
错误:列“fieldtally1_id”是整数类型,但表达式是字符类型不同 SQL 状态:42804 提示:您需要重写或强制转换表达式。字符:1024