10.3 全局序列的使用
全局序列的基本用法很简单︰ 在 BDR 节点,当创建一个序列,追加使用 bdr;到你序列创建语句︰
CREATE SEQUENCE test_seq USING bdr;
一旦你已经创建了一个全局的序列可能会将其重新使用 nextval 像任何其他序列。
大多数的 PostgreSQL 应用程序不使用创建序列直接;相反,他们使用的串行的伪类型。为此,BDR 提供的 default_sequenceam 参数。当设置为 bdr,所有序列将自动都创建作为全局序列除非显式重写由使用选项。所以每个序列或 BIGSERIAL,自动将全局序列。例如︰
BEGIN;
SET LOCAL default_sequenceam = 'bdr';
CREATE TABLE gstest (
id serial primary key,
parrot text
);
COMMIT;
将创建一个名为 gstest_id_seq 的全局序列和 gstest.id 的默认值设置为 nextval('gstest_id_seq')。
或者,应用程序可能做什么做什么 PostgreSQL 内部序列和 BIGSERIAL 型︰
BEGIN;
CREATE TABLE gstest (
id bigint primarykey,
parrot text
);
CREATE SEQUENCE gstest_id_seq USING bdr OWNED BY gstest.id;
ALTER TABLE gstest ALTER COLUMN id DEFAULT nextval('gstest_id_seq');
将一个PostgreSQL 全局序列更改为本地序列,请使用︰
ALTER SEQUENCE seqname USING local;
然而,请注意这不会导致要恢复在分配; 的任何节点上的最高值的序列相反,它恢复在本地节点上分配的最高值。这是一般明智到 setval(...) 到目前而独占锁定了目标表中的最高值序列在序列举行。
警告 全局序列状态存储在 BDR 编目,不的序关系及其自我,并由序列跟踪名称不序列 oid。如果你删除全局序列,并使用相同的名称重新创建它,它亦会拾取大约离开的位置,虽然它会扔掉大的 Id 范围过程中。