-
Notifications
You must be signed in to change notification settings - Fork 334
Expand file tree
/
Copy pathpostgres_schema.sql
More file actions
280 lines (245 loc) · 5.82 KB
/
postgres_schema.sql
File metadata and controls
280 lines (245 loc) · 5.82 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
-- table with manual primary key
-- generate insert only (no update, save, upsert, delete)
CREATE TABLE a_manual_table (
a_text VARCHAR(255)
);
-- table with sequence
CREATE TABLE a_sequence (
a_seq SERIAL,
CONSTRAINT a_sequence_pkey PRIMARY KEY (a_seq)
);
CREATE TABLE a_sequence_multi (
a_seq SERIAL,
a_text VARCHAR(255),
CONSTRAINT a_sequence_multi_pkey PRIMARY KEY (a_seq)
);
-- table with primary key
CREATE TABLE a_primary (
a_key INTEGER PRIMARY KEY
);
CREATE TABLE a_primary_multi (
a_key INTEGER PRIMARY KEY,
a_text VARCHAR(255)
);
-- table with composite primary key
CREATE TABLE a_primary_composite (
a_key1 INTEGER,
a_key2 INTEGER,
PRIMARY KEY (a_key1, a_key2)
);
-- table with foreign key
CREATE TABLE a_foreign_key (
a_key INTEGER REFERENCES a_primary (a_key)
);
-- table with composite foreign key
CREATE TABLE a_foreign_key_composite (
a_key1 INTEGER,
a_key2 INTEGER,
FOREIGN KEY (a_key1, a_key2) REFERENCES a_primary_composite (a_key1, a_key2)
);
-- tables with the same foreign key's name 'foreign_key_1'
-- case for issue #396
CREATE TABLE a_same_fk_name_1 (
a_fkey INTEGER CONSTRAINT foreign_key_1 REFERENCES a_primary (a_key)
);
CREATE TABLE a_same_fk_name_2 (
a_fkey INTEGER CONSTRAINT foreign_key_1 REFERENCES a_primary (a_key)
);
-- table with index
CREATE TABLE a_index (
a_key INTEGER
);
CREATE INDEX a_index_idx ON a_index (a_key);
-- table with composite index
CREATE TABLE a_index_composite (
a_key1 INTEGER,
a_key2 INTEGER
);
CREATE INDEX a_index_composite_idx ON a_index_composite (a_key1, a_key2);
-- table with unique index
CREATE TABLE a_unique_index (
a_key INTEGER UNIQUE
);
-- table with composite unique index
CREATE TABLE a_unique_index_composite (
a_key1 INTEGER,
a_key2 INTEGER,
UNIQUE (a_key1, a_key2)
);
-- table a_partition_table
CREATE TABLE a_partition_table (
a_key1 INTEGER,
a_key2 TIMESTAMP,
CONSTRAINT a_partition_table_pkey PRIMARY KEY (a_key1,a_key2)
) PARTITION BY RANGE (a_key2);
-- enum type
CREATE TYPE a_enum AS ENUM (
'ONE',
'TWO'
);
/*
a_enum
bigint
bigserial
bit
bit varying
bool
boolean
bpchar
bytea
char
character
character varying
date
decimal
double precision
inet
int
integer
interval
json
jsonb
money
numeric
real
serial
smallint
smallserial
text
time
timestamp
timestamptz
timetz
uuid
varchar
xml
*/
-- table with all field types and all nullable field types
CREATE TABLE a_bit_of_everything (
a_enum a_enum NOT NULL,
a_enum_nullable a_enum,
a_bigint BIGINT NOT NULL,
a_bigint_nullable BIGINT,
a_bigserial BIGSERIAL NOT NULL,
a_bigserial_nullable BIGSERIAL,
a_bit BIT NOT NULL,
a_bit_nullable BIT,
a_bit_varying BIT VARYING NOT NULL,
a_bit_varying_nullable BIT VARYING,
a_bool BOOL NOT NULL,
a_bool_nullable BOOL,
a_boolean BOOLEAN NOT NULL,
a_boolean_nullable BOOLEAN,
a_bpchar BPCHAR NOT NULL,
a_bpchar_nullable BPCHAR,
a_bytea BYTEA NOT NULL,
a_bytea_nullable BYTEA,
a_char CHAR NOT NULL,
a_char_nullable CHAR,
a_character CHARACTER NOT NULL,
a_character_nullable CHARACTER,
a_character_varying CHARACTER VARYING NOT NULL,
a_character_varying_nullable CHARACTER VARYING,
a_date DATE NOT NULL,
a_date_nullable DATE,
a_decimal DECIMAL NOT NULL,
a_decimal_nullable DECIMAL,
a_double_precision DOUBLE PRECISION NOT NULL,
a_double_precision_nullable DOUBLE PRECISION,
a_inet INET NOT NULL,
a_inet_nullable INET,
a_int INT NOT NULL,
a_int_nullable INT,
a_integer INTEGER NOT NULL,
a_integer_nullable INTEGER,
a_interval INTERVAL NOT NULL,
a_interval_nullable INTERVAL,
a_json JSON NOT NULL,
a_json_nullable JSON,
a_jsonb JSONB NOT NULL,
a_jsonb_nullable JSONB,
a_money MONEY NOT NULL,
a_money_nullable MONEY,
a_numeric NUMERIC NOT NULL,
a_numeric_nullable NUMERIC,
a_real REAL NOT NULL,
a_real_nullable REAL,
a_serial SERIAL NOT NULL,
a_serial_nullable SERIAL,
a_smallint SMALLINT NOT NULL,
a_smallint_nullable SMALLINT,
a_smallserial SMALLSERIAL NOT NULL,
a_smallserial_nullable SMALLSERIAL,
a_text TEXT NOT NULL,
a_text_nullable TEXT,
a_time TIME NOT NULL,
a_time_nullable TIME,
a_timestamp TIMESTAMP NOT NULL,
a_timestamp_nullable TIMESTAMP,
a_timestamptz TIMESTAMPTZ NOT NULL,
a_timestamptz_nullable TIMESTAMPTZ,
a_timetz TIMETZ NOT NULL,
a_timetz_nullable TIMETZ,
a_uuid UUID NOT NULL,
a_uuid_nullable UUID,
a_varchar VARCHAR NOT NULL,
a_varchar_nullable VARCHAR,
a_xml XML NOT NULL,
a_xml_nullable XML
);
-- views
CREATE VIEW a_view_of_everything AS
SELECT * FROM a_bit_of_everything;
CREATE VIEW a_view_of_everything_some AS
SELECT a_bool, a_text FROM a_bit_of_everything;
-- procs
CREATE PROCEDURE a_0_in_0_out() AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;
CREATE PROCEDURE a_1_in_0_out(a_param INTEGER) AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION a_0_in_1_out(OUT a_return INTEGER) AS $$
BEGIN
a_return := 10;
END;
$$ LANGUAGE plpgsql;
-- funcs
CREATE FUNCTION a_1_in_1_out(a_param INTEGER, OUT a_return INTEGER) AS $$
BEGIN
a_return := a_param;
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION a_2_in_2_out(param_one INTEGER, param_two INTEGER, OUT return_one INTEGER, OUT return_two INTEGER) AS $$
BEGIN
return_one := param_one;
return_two := param_two;
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION a_func_0_in() RETURNS INTEGER AS $$
BEGIN
RETURN 10;
END;
$$ LANGUAGE plpgsql;
-- provided to keep schema output in parity with other databases
CREATE FUNCTION a_func_1_in(a_param INTEGER) RETURNS INTEGER AS $$
BEGIN
RETURN a_param;
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION a_func_2_in(param_one INTEGER, param_two INTEGER) RETURNS INTEGER AS $$
BEGIN
RETURN param_one + param_two;
END;
$$ LANGUAGE plpgsql;
-- overloading (postgres only)
CREATE PROCEDURE a_overloaded(param_one INTEGER) AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;
CREATE PROCEDURE a_overloaded(param_one INTEGER, param_two INTEGER) AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;