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 范围过程中。

results matching ""

    No results matching ""