forked from python-postgres/be
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpreload.sql
More file actions
63 lines (51 loc) · 1.35 KB
/
Copy pathpreload.sql
File metadata and controls
63 lines (51 loc) · 1.35 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
DROP SCHEMA IF EXISTS nsp_a CASCADE;
DROP SCHEMA IF EXISTS nsp_b CASCADE;
CREATE SCHEMA nsp_a;
CREATE SCHEMA nsp_b;
CREATE OR REPLACE FUNCTION nsp_a.foo() RETURNS VOID LANGUAGE python AS
$$
def main():
pass
$$;
CREATE OR REPLACE FUNCTION nsp_b.foo() RETURNS VOID LANGUAGE python AS
$$
def main():
pass
$$;
CREATE OR REPLACE FUNCTION load_em() RETURNS VOID LANGUAGE python AS
$$
import sys
import Postgres
def main():
p_a = proc('nsp_a.foo()')
p_b = proc('nsp_b.foo()')
assert p_a.oidstr not in sys.modules
assert p_b.oidstr not in sys.modules
Postgres.preload('nsp_a', 'nsp_b')
assert p_a.oidstr in sys.modules
assert p_b.oidstr in sys.modules
Postgres.NOTICE('success')
$$;
SELECT load_em();
CREATE OR REPLACE FUNCTION preload_schemas(text[]) RETURNS VOID LANGUAGE python AS
$$
from Postgres import preload
def main(x):
preload(*list(map(str, x)))
$$;
-- should work for a few versions
SET standard_conforming_strings = OFF;
SHOW standard_conforming_strings;
CREATE OR REPLACE FUNCTION nsp_a.test_settings() RETURNS TEXT LANGUAGE python
SET standard_conforming_strings = ON
AS
$$
from Postgres import WARNING
inload = prepare('show standard_conforming_strings').first()
WARNING('loaded test_settings: ' + str(inload))
def main():
return inload
$$;
SELECT preload_schemas('{nsp_a}'::text[]);
SELECT nsp_a.test_settings();
SHOW standard_conforming_strings;