-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsicob_no_geo_column.sql
More file actions
85 lines (75 loc) · 3.17 KB
/
Copy pathsicob_no_geo_column.sql
File metadata and controls
85 lines (75 loc) · 3.17 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
SET CLIENT_ENCODING TO 'utf8';
CREATE OR REPLACE FUNCTION public.sicob_no_geo_column(reloid text, exclude_cols text[], _prefix text)
RETURNS text
LANGUAGE plpgsql
STABLE SECURITY DEFINER
AS $function$
--DEVUELVE LOS CAMPOS NO GEOMETRICOS DE UNA TABLA SEPARADOS POR COMA, EXCLUYENDO LOS CAMPOS INDICADOS EN
-- 'exclude_cols' Y ANTECEDIENDO A CADA NOMBRE DE CAMPO EL VALOR DE 'prefix'
--Call: SELECT * FROM sicob_no_geo_column('uploads.tt','{sicob_id}','poly.');
DECLARE
cols text;
__prefix text;
tbl_name text; sch_name text;
BEGIN
SELECT * FROM public.sicob_split_table_name(reloid) INTO sch_name, tbl_name;
IF _prefix IS NOT NULL AND _prefix <> '' THEN
__prefix := CASE WHEN _prefix = ' ' THEN '' ELSE _prefix END; --> Si no se desea anteponer prefijos entonces enviar como 1 espacio vacio " ".
ELSE
__prefix := reloid::text || '.';
END IF;
IF sch_name <> '' THEN
SELECT string_agg(__prefix || column_name, ',') as columnas into cols FROM (
SELECT column_name
FROM information_schema.columns c
WHERE table_schema=sch_name AND table_name=tbl_name
AND c.column_name not in (
SELECT gc.f_geometry_column FROM public.geometry_columns gc, pg_class c, pg_namespace n
WHERE c.oid = reloid::regclass AND n.oid = c.relnamespace
AND gc.f_table_schema = n.nspname AND gc.f_table_name = c.relname
)
AND c.column_name <> ALL ($2)
ORDER BY ordinal_position
) t;
IF cols IS NULL THEN
SELECT string_agg(__prefix || column_name, ',') as columnas into cols FROM (
select attname AS column_name from pg_attribute where attrelid = reloid::regclass
AND attname not in ('the_geom','the_geom_webmercator', 'ctid', 'cmax', 'xmax', 'cmin', 'xmin', 'tableoid', 'oid')
AND attname <> ALL ($2)
) t;
END IF;
IF cols IS NULL THEN
cols := '[NO ENCONTRADO]';
END IF;
RETURN cols;
END IF;
--> intentando como tabla temporal
/*
SELECT string_agg(__prefix || column_name, ',') as columnas into cols FROM (
SELECT column_name
FROM information_schema.columns c
WHERE table_schema like 'pg_temp%' AND table_name=tbl_name
AND c.column_name not in (
SELECT gc.f_geometry_column FROM public.geometry_columns gc, pg_class c, pg_namespace n
WHERE c.oid = reloid::regclass AND n.oid = c.relnamespace
AND gc.f_table_schema = n.nspname AND gc.f_table_name = c.relname
)
AND c.column_name <> ALL ($2)
ORDER BY ordinal_position
) t;
*/
SELECT string_agg(__prefix || column_name, ',') as columnas into cols FROM (
select attname AS column_name from pg_attribute where attrelid = tbl_name::regclass
AND attname not in ('the_geom','the_geom_webmercator', 'ctid', 'cmax', 'xmax', 'cmin', 'xmin', 'tableoid', 'oid')
AND attname <> ALL ($2)
) t;
IF cols IS NULL THEN
cols := '[NO ENCONTRADO]';
END IF;
RETURN cols;
EXCEPTION
WHEN others THEN
RAISE EXCEPTION 'geoSICOB (sicob_no_geo_column): % (%)', SQLERRM, SQLSTATE;
END;
$function$