/
ECHO_TEMP_TABLE_5.sql
101 lines (86 loc) · 4.82 KB
/
ECHO_TEMP_TABLE_5.sql
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
\echo -- 5. Временная схема и суперпользователь
-- 5. Временная схема и суперпользователь
\echo -- Создаем таблицу, смотрим схему
-- Создаем таблицу, смотрим схему
\echo SELECT current_schemas(true);
SELECT current_schemas(true);
\echo CREATE TEMP TABLE t_temp5 (id integer);
CREATE TEMP TABLE t_temp5 (id integer);
\echo SELECT current_schemas(true);
SELECT current_schemas(true);
\echo SELECT n.nspname FROM pg_catalog.pg_namespace n ORDER BY 1;
SELECT n.nspname FROM pg_catalog.pg_namespace n ORDER BY 1;
\echo -- Добавим строки, проверим временную схему и строки из таблицы
-- Добавим строки, проверим временную схему и строки из таблицы
\echo INSERT INTO t_temp5 VALUES (1),(2),(3);
INSERT INTO t_temp5 VALUES (1),(2),(3);
\echo SELECT pg_my_temp_schema()::regnamespace;
SELECT pg_my_temp_schema()::regnamespace;
\echo BEGIN;
BEGIN;
\echo -- Анонимный блок нужен чтобы сформировать полное имя: схема.таблица
-- Анонимный блок нужен чтобы сформировать полное имя: схема.таблица
\echo DO $$
\echo DECLARE
\echo _query text;
\echo _cursor CONSTANT refcursor := '_cursor';
\echo BEGIN
\echo _query := 'SELECT * FROM ' || (SELECT n.nspname || '.' || c.relname relname FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_am am ON am.oid = c.relam WHERE c.relname = ('t_temp5'));
\echo OPEN _cursor FOR EXECUTE _query;
\echo END
\echo $$;
DO $$
DECLARE
_query text;
_cursor CONSTANT refcursor := '_cursor';
BEGIN
_query := 'SELECT * FROM ' || (SELECT n.nspname || '.' || c.relname relname FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_am am ON am.oid = c.relam WHERE c.relname = ('t_temp5'));
OPEN _cursor FOR EXECUTE _query;
END
$$;
\echo FETCH ALL FROM _cursor;
FETCH ALL FROM _cursor;
\echo COMMIT;
COMMIT;
\echo -- Попробуем удалить временную схему
-- Попробуем удалить временную схему
\echo DO $$ BEGIN EXECUTE 'DROP SCHEMA IF EXISTS ' || pg_my_temp_schema()::regnamespace; END $$;
DO $$ BEGIN EXECUTE 'DROP SCHEMA IF EXISTS ' || pg_my_temp_schema()::regnamespace; END $$;
\echo DO $$ BEGIN EXECUTE 'DROP SCHEMA IF EXISTS ' || pg_my_temp_schema()::regnamespace || ' CASCADE'; END $$;
DO $$ BEGIN EXECUTE 'DROP SCHEMA IF EXISTS ' || pg_my_temp_schema()::regnamespace || ' CASCADE'; END $$;
\echo SELECT current_schemas(true);
SELECT current_schemas(true);
\echo -- Создадим еще одну временную таблицу
-- Создадим еще одну временную таблицу
\echo CREATE TEMP TABLE t_temp5_2 (id integer);
CREATE TEMP TABLE t_temp5_2 (id integer);
\echo SELECT n.nspname FROM pg_catalog.pg_namespace n ORDER BY 1;
SELECT n.nspname FROM pg_catalog.pg_namespace n ORDER BY 1;
\echo SELECT current_schemas(true);
SELECT current_schemas(true);
\echo SHOW search_path;
SHOW search_path;
\echo INSERT INTO t_temp5_2 VALUES (1), (2), (3);
INSERT INTO t_temp5_2 VALUES (1), (2), (3);
\echo -- Временная схема не определяется
-- Временная схема не определяется
\echo SELECT pg_my_temp_schema()::regnamespace;
SELECT pg_my_temp_schema()::regnamespace;
\echo SELECT nspname FROM pg_namespace WHERE oid = pg_my_temp_schema();
SELECT nspname FROM pg_namespace WHERE oid = pg_my_temp_schema();
\echo SELECT * FROM pg_temp.t_temp5_2;
SELECT * FROM pg_temp.t_temp5_2;
\echo SELECT * FROM pg_temp_3.t_temp5_2;
SELECT * FROM pg_temp_3.t_temp5_2;
\echo SELECT current_schemas(true);
SELECT current_schemas(true);
\echo SELECT * FROM pg_catalog.pg_namespace;
SELECT * FROM pg_catalog.pg_namespace;
\echo -- Проверим что пишут в системном каталоге
-- Проверим что пишут в системном каталоге
\echo SELECT c.oid, c.relname FROM pg_catalog.pg_class c WHERE c.relname = 't_temp5_2';
SELECT c.oid, c.relname FROM pg_catalog.pg_class c WHERE c.relname = 't_temp5_2';
\echo SELECT oid, relnamespace FROM pg_class WHERE oid = (SELECT c.oid FROM pg_catalog.pg_class c WHERE c.relname = 't_temp5');
SELECT oid, relnamespace FROM pg_class WHERE oid = (SELECT c.oid FROM pg_catalog.pg_class c WHERE c.relname = 't_temp5');
\echo SELECT * FROM pg_namespace WHERE oid = (SELECT relnamespace FROM pg_class WHERE oid = (SELECT c.oid FROM pg_catalog.pg_class c WHERE c.relname = 't_temp5'));
SELECT * FROM pg_namespace WHERE oid = (SELECT relnamespace FROM pg_class WHERE oid = (SELECT c.oid FROM pg_catalog.pg_class c WHERE c.relname = 't_temp5'));