我有以下存储过程:
CREATE OR REPLACE FUNCTION get_next_network()
RETURNS inet AS
$BODY$
/* get the next networkd */
DECLARE
ip inet;
BEGIN
select into ip (inet'10.41.142.0' + nextval('NetworkAddress_seq'));
return ip;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
序列 NetworkAddress_seq 以 256 递增:
CREATE SEQUENCE "NetworkAddress_seq"
INCREMENT 256
MINVALUE 256
MAXVALUE 9223372036854775807
START 256
CACHE 256;
ALTER TABLE "NetworkAddress_seq"
OWNER TO my_user;
当我从 pgAdmin 调用该函数时,我得到:10.41.143.0
当我从 php/Doctrine/ORM 调用它时:
$stmt = $this->_em->getConnection()->prepare("select get_next_network()");
$stmt->execute();
$stmt->fetchColumn(0);
我得到类似的东西10.56.142.0
为什么?
编辑:我通过硬编码返回值来检查我是否使用了相同的过程——在这种情况下,我在 pgadmin 和 php 中都得到了相同的值。这也将问号放在序列上,但是当我从程序而不是直接查询它时,我会假设无论我从哪里调用 get_next_network 程序,它都会使用相同的序列......或者我错了?
Edit2:奇怪的行为与 php 端无关 - 如果打开多个 pgAdmin SQL 查询窗口(不同的数据库连接?),我会得到相同的奇怪结果。例如:在 Window1 我运行
select * from get_next_network();
最终得到:10.43.143.0,如果我再次运行它,我得到:10.43.144.0、10.43.145.0、...等。在 Window2 中 - 相同的查询返回:10.44.143.0,所有后续查询得到:10.44.144.0, 10.44.145.0,..等。