Skip to content

Commit f6ad1f4

Browse files
author
Nikita Glukhov
committed
Add contrib/jsonb_toaster
1 parent 95870c0 commit f6ad1f4

File tree

7 files changed

+2851
-30
lines changed

7 files changed

+2851
-30
lines changed

contrib/jsonb_toaster/Makefile

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# contrib/jsonb_toaster/Makefile
2+
3+
MODULE_big = jsonb_toaster
4+
OBJS = \
5+
$(WIN32RES) \
6+
jsonb_toaster.o
7+
8+
EXTENSION = jsonb_toaster
9+
DATA = jsonb_toaster--1.0.sql
10+
PGFILEDESC = "jsonb_toaster - updatable jsonb toaster"
11+
12+
REGRESS = jsonb_toaster
13+
14+
ifdef USE_PGXS
15+
PG_CONFIG = pg_config
16+
PGXS := $(shell $(PG_CONFIG) --pgxs)
17+
include $(PGXS)
18+
else
19+
subdir = contrib/jsonb_toaster
20+
top_builddir = ../..
21+
include $(top_builddir)/src/Makefile.global
22+
include $(top_srcdir)/contrib/contrib-global.mk
23+
endif
Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
CREATE EXTENSION bytea_toaster;
2+
CREATE TABLE tst_failed (
3+
t jsonb TOASTER bytea_toaster
4+
);
5+
CREATE TABLE tst1 (
6+
t bytea TOASTER bytea_toaster
7+
);
8+
CREATE TABLE tst2 (
9+
t bytea
10+
);
11+
ALTER TABLE tst2 ALTER COLUMN t SET TOASTER bytea_toaster;
12+
CREATE TABLE test_bytea_append (id int, a bytea STORAGE EXTERNAL);
13+
ALTER TABLE test_bytea_append ALTER a SET TOASTER bytea_toaster;
14+
INSERT INTO test_bytea_append SELECT i, repeat('a', 10000)::bytea FROM generate_series(1, 10) i;
15+
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
16+
SAVEPOINT p1;
17+
UPDATE test_bytea_append SET a = a || repeat('b', 3000)::bytea;
18+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 12990, 20), 'UTF8') FROM test_bytea_append;
19+
id | convert_from
20+
----+---------------------------------
21+
1 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
22+
2 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
23+
3 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
24+
4 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
25+
5 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
26+
6 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
27+
7 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
28+
8 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
29+
9 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
30+
10 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
31+
(10 rows)
32+
33+
SAVEPOINT p2;
34+
UPDATE test_bytea_append SET a = a || repeat('c', 2000)::bytea;
35+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 12990, 20) || substr(a, 14990, 20), 'UTF8') FROM test_bytea_append;
36+
id | convert_from
37+
----+-----------------------------------------------------
38+
1 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
39+
2 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
40+
3 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
41+
4 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
42+
5 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
43+
6 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
44+
7 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
45+
8 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
46+
9 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
47+
10 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
48+
(10 rows)
49+
50+
ROLLBACK TO SAVEPOINT p2;
51+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 12990, 20), 'UTF8') FROM test_bytea_append;
52+
id | convert_from
53+
----+---------------------------------
54+
1 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
55+
2 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
56+
3 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
57+
4 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
58+
5 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
59+
6 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
60+
7 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
61+
8 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
62+
9 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
63+
10 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
64+
(10 rows)
65+
66+
UPDATE test_bytea_append SET a = a || repeat('d', 4000)::bytea;
67+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 12990, 20) || substr(a, 16990, 20), 'UTF8') FROM test_bytea_append;
68+
id | convert_from
69+
----+-----------------------------------------------------
70+
1 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
71+
2 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
72+
3 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
73+
4 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
74+
5 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
75+
6 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
76+
7 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
77+
8 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
78+
9 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
79+
10 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbdddddddddddddddddddd
80+
(10 rows)
81+
82+
ROLLBACK TO SAVEPOINT p1;
83+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 12990, 20), 'UTF8') FROM test_bytea_append;
84+
id | convert_from
85+
----+--------------
86+
1 | aaaaaaaaaaa
87+
2 | aaaaaaaaaaa
88+
3 | aaaaaaaaaaa
89+
4 | aaaaaaaaaaa
90+
5 | aaaaaaaaaaa
91+
6 | aaaaaaaaaaa
92+
7 | aaaaaaaaaaa
93+
8 | aaaaaaaaaaa
94+
9 | aaaaaaaaaaa
95+
10 | aaaaaaaaaaa
96+
(10 rows)
97+
98+
UPDATE test_bytea_append SET a = a || repeat('e', 5000)::bytea;
99+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 14990, 20), 'UTF8') FROM test_bytea_append;
100+
id | convert_from
101+
----+---------------------------------
102+
1 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
103+
2 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
104+
3 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
105+
4 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
106+
5 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
107+
6 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
108+
7 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
109+
8 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
110+
9 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
111+
10 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
112+
(10 rows)
113+
114+
COMMIT;
115+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 14990, 20), 'UTF8') FROM test_bytea_append;
116+
id | convert_from
117+
----+---------------------------------
118+
1 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
119+
2 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
120+
3 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
121+
4 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
122+
5 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
123+
6 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
124+
7 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
125+
8 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
126+
9 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
127+
10 | aaaaaaaaaaaeeeeeeeeeeeeeeeeeeee
128+
(10 rows)
129+
130+
TRUNCATE test_bytea_append;
131+
INSERT INTO test_bytea_append SELECT i, repeat('a', 10000)::bytea FROM generate_series(1, 10) i;
132+
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
133+
UPDATE test_bytea_append SET a = a || repeat('b', 3000)::bytea;
134+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 12990, 20), 'UTF8') FROM test_bytea_append;
135+
id | convert_from
136+
----+---------------------------------
137+
1 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
138+
2 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
139+
3 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
140+
4 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
141+
5 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
142+
6 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
143+
7 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
144+
8 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
145+
9 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
146+
10 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
147+
(10 rows)
148+
149+
UPDATE test_bytea_append SET a = a || repeat('c', 2000)::bytea;
150+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 12990, 20) || substr(a, 14990, 20), 'UTF8') FROM test_bytea_append;
151+
id | convert_from
152+
----+-----------------------------------------------------
153+
1 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
154+
2 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
155+
3 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
156+
4 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
157+
5 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
158+
6 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
159+
7 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
160+
8 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
161+
9 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
162+
10 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
163+
(10 rows)
164+
165+
UPDATE test_bytea_append SET a = a || repeat('d', 4000)::bytea;
166+
SELECT id, convert_from(substr(a, 9990, 20) || substr(a, 12990, 20) || substr(a, 14990, 20) || substr(a, 18990, 20), 'UTF8') FROM test_bytea_append;
167+
id | convert_from
168+
----+-------------------------------------------------------------------------
169+
1 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
170+
2 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
171+
3 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
172+
4 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
173+
5 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
174+
6 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
175+
7 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
176+
8 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
177+
9 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
178+
10 | aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
179+
(10 rows)
180+
181+
CREATE FUNCTION test_bytea_append_func() RETURNS void AS
182+
$$
183+
DECLARE
184+
a0 bytea;
185+
a1 bytea;
186+
a2 bytea;
187+
a3 bytea;
188+
BEGIN
189+
TRUNCATE test_bytea_append;
190+
INSERT INTO test_bytea_append SELECT i, repeat('a', 10000)::bytea FROM generate_series(1, 10) i;
191+
SELECT a INTO a0 FROM test_bytea_append LIMIT 1;
192+
193+
UPDATE test_bytea_append SET a = a || repeat('b', 3000)::bytea;
194+
SELECT a INTO a1 FROM test_bytea_append LIMIT 1;
195+
196+
UPDATE test_bytea_append SET a = a || repeat('c', 2000)::bytea;
197+
SELECT a INTO a2 FROM test_bytea_append LIMIT 1;
198+
199+
UPDATE test_bytea_append SET a = a || repeat('d', 4000)::bytea;
200+
SELECT a INTO a3 FROM test_bytea_append LIMIT 1;
201+
202+
RAISE NOTICE '%', convert_from(substr(a0, 9990, 20), 'UTF8');
203+
RAISE NOTICE '%', convert_from(substr(a1, 9990, 20) || substr(a1, 12990, 20), 'UTF8');
204+
RAISE NOTICE '%', convert_from(substr(a2, 9990, 20) || substr(a2, 12990, 20) || substr(a2, 14990, 20), 'UTF8');
205+
RAISE NOTICE '%', convert_from(substr(a3, 9990, 20) || substr(a3, 12990, 20) || substr(a3, 14990, 20) || substr(a3, 18990, 20), 'UTF8');
206+
END;
207+
$$ LANGUAGE plpgsql;
208+
SELECT test_bytea_append_func();
209+
NOTICE: aaaaaaaaaaa
210+
NOTICE: aaaaaaaaaaabbbbbbbbbbbbbbbbbbbb
211+
NOTICE: aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc
212+
NOTICE: aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccdddddddddddddddddddd
213+
test_bytea_append_func
214+
------------------------
215+
216+
(1 row)
217+
218+
COMMIT;
219+
DROP TABLE test_bytea_append;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* contrib/jsonb_toaster/jsonb_toaster--1.0.sql */
2+
3+
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
4+
\echo Use "CREATE EXTENSION jsonb_toaster" to load this file. \quit
5+
6+
CREATE FUNCTION jsonb_toaster_handler(internal)
7+
RETURNS toaster_handler
8+
AS 'MODULE_PATHNAME'
9+
LANGUAGE C;
10+
11+
CREATE TOASTER jsonb_toaster HANDLER jsonb_toaster_handler;
12+
13+
COMMENT ON TOASTER jsonb_toaster IS 'jsonb_toaster is a updatable jsonb toaster';
14+

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy