我有一个Postgres 9.04数据库的表,其中包含一个名为Versions:
的表CREATE TABLE tracking."Versions"
(
"ObjectId" UUID NOT NULL,
"From" BIGINT NOT NULL,
"To" BIGINT,
"DataTypeId" INTEGER NOT NULL REFERENCES tracking."DataTypes" ( "DataTypeId" ),
CONSTRAINT "Versions_pkey" PRIMARY KEY ("ObjectId", "DataTypeId")
);
数据库中定义的序列由From&和到列:
CREATE SEQUENCE tracking."dbVersion"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
Versions表实际上是跟踪对其他表所做的更改。没有详细说明:
我没有将From列的Default值设置为“nextval('tracking。”dbVersion'),而是实现了一个存储函数,它返回调用此函数的结果:
CREATE OR REPLACE FUNCTION tracking."NextVersion"() RETURNS BIGINT
AS $$
SELECT nextval('tracking."dbVersion"'::regclass);
$$ LANGUAGE Sql;
所有用于在表中插入行的代码都是使用Entity Framework 4在C#中实现的。所有C#代码都运行正常。奇怪的是,当我查看Versions表中的数据时,From列中的值都是偶数。当我在PgAdmin中查看序列的属性时,它很奇怪。但是下次插入一行时,存储的值是偶数。
我做错了什么?当您将nextval调用放在列的默认属性中时,Postgres如何始终使用所有值?
答案 0 :(得分:1)
好吧,是时候让我感到羞怯。
我查看了我的C#代码,用于将行插入到Versions表&我发现我实际上是两次调用NextVersion存储过程。这就解释了为什么序列始终是在写入From字段时。我删除了第二个电话&问题解决了。
贝