aboutsummaryrefslogtreecommitdiff
path: root/contrib/dbmirror/MirrorSetup.sql
blob: 18c5b0693e3258d8b0519ecd99ee237d5dad1f15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
BEGIN;


CREATE FUNCTION "recordchange" () RETURNS trigger AS
'$libdir/pending', 'recordchange' LANGUAGE 'C';



CREATE TABLE dbmirror_MirrorHost (
MirrorHostId serial not null,
SlaveName varchar NOT NULL,
PRIMARY KEY(MirrorHostId)
);





CREATE TABLE dbmirror_Pending (
SeqId serial,
TableName Name NOT NULL,
Op character,
XID int4 NOT NULL,
PRIMARY KEY (SeqId)
);

CREATE INDEX dbmirror_Pending_XID_Index ON dbmirror_Pending (XID);

CREATE TABLE dbmirror_PendingData (
SeqId int4 NOT NULL,
IsKey bool NOT NULL,
Data varchar,
PRIMARY KEY (SeqId, IsKey) ,
FOREIGN KEY (SeqId) REFERENCES dbmirror_Pending (SeqId) ON UPDATE CASCADE  ON DELETE CASCADE
);


CREATE TABLE dbmirror_MirroredTransaction (
XID int4 NOT NULL,
LastSeqId int4 NOT NULL,
MirrorHostId int4 NOT NULL,
PRIMARY KEY  (XID,MirrorHostId),
FOREIGN KEY (MirrorHostId) REFERENCES dbmirror_MirrorHost (MirrorHostId) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (LastSeqId) REFERENCES dbmirror_Pending (SeqId)  ON UPDATE
CASCADE ON DELETE CASCADE
);


UPDATE pg_proc SET proname='nextval_pg' WHERE proname='nextval';

CREATE FUNCTION pg_catalog.nextval(regclass) RETURNS int8 AS
  '$libdir/pending', 'nextval_mirror' LANGUAGE 'C' STRICT;


UPDATE pg_proc set proname='setval_pg' WHERE proname='setval';

CREATE FUNCTION pg_catalog.setval(regclass, int8, boolean) RETURNS int8 AS
  '$libdir/pending', 'setval3_mirror' LANGUAGE 'C' STRICT;
CREATE FUNCTION pg_catalog.setval(regclass, int8) RETURNS int8 AS
  '$libdir/pending', 'setval_mirror' LANGUAGE 'C' STRICT;

COMMIT;