We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see ourdocumentation.
There was an error while loading.Please reload this page.
1 parent702d966 commit2f38bd2Copy full SHA for 2f38bd2
Makefile
@@ -24,3 +24,4 @@ endif
24
25
$(EXTENSION)--$(EXTVERSION).sql: sql/init.sql sql/hash.sql sql/range.sql
26
cat$^>$@
27
+check: EXTRA_REGRESS_OPTS=--temp-config=$(top_srcdir)/$(subdir)/conf.add
conf.add
@@ -0,0 +1 @@
1
+shared_preload_libraries='pathman'
expected/pathman.out
@@ -333,7 +333,6 @@ NOTICE: function test.hash_rel_hash_update_trigger_func() does not exist, skipp
333
(1 row)
334
335
DROP TABLE test.hash_rel CASCADE;
336
-NOTICE: drop cascades to 3 other objects
337
SELECT pathman.drop_range_partitions('test.num_range_rel');
338
drop_range_partitions
339
-----------------------
init.c
@@ -49,7 +49,7 @@ get_extension_schema()
49
boolisnull;
50
51
ret=SPI_exec("SELECT extnamespace::regnamespace::text FROM pg_extension WHERE extname = 'pathman'",0);
52
-if (ret>0&&SPI_tuptable!=NULL)
+if (ret>0&&SPI_tuptable!=NULL&&SPI_processed>0)
53
{
54
TupleDesctupdesc=SPI_tuptable->tupdesc;
55
SPITupleTable*tuptable=SPI_tuptable;
@@ -295,7 +295,7 @@ load_check_constraints(Oid parent_oid)
295
296
if (ranges[i].max>ranges[i+1].min)
297
298
-elog(WARNING,"Partitions %u and %u overlap. Disabling pathman for relation %u..",
+elog(WARNING,"Partitions %u and %u overlap. Disabling pathman for relation %u...",
299
ranges[i].child_oid,ranges[i+1].child_oid,parent_oid);
300
hash_search(relations, (constvoid*)&parent_oid,HASH_REMOVE,&found);
301
}
pathman.c
@@ -1,6 +1,7 @@
#include"pathman.h"
2
#include"postgres.h"
3
#include"fmgr.h"
4
+#include"miscadmin.h"
5
#include"nodes/nodeFuncs.h"
6
#include"nodes/pg_list.h"
7
#include"nodes/relation.h"
@@ -100,6 +101,14 @@ static void set_pathkeys(PlannerInfo *root, RelOptInfo *childrel, Path *path);
100
101
void
102
_PG_init(void)
103
104
+if (IsUnderPostmaster)
105
+{
106
+elog(ERROR,"Pathman module must be initialized in postmaster. "
107
+"Put the following line to configuration file: "
108
+"shared_preload_library = 'pathman'");
109
+initialization_needed= false;
110
+}
111
+
112
set_rel_pathlist_hook_original=set_rel_pathlist_hook;
113
set_rel_pathlist_hook=pathman_set_rel_pathlist_hook;
114
shmem_startup_hook_original=shmem_startup_hook;
sql/hash.sql
@@ -108,11 +108,17 @@ DECLARE
rec RECORD;
numINTEGER :=0;
BEGIN
+ relation := @extschema@.validate_relname(relation);
/* Drop trigger first*/
PERFORM @extschema@.drop_hash_triggers(relation);
115
DELETEFROM @extschema@.pathman_configWHERE relname= relation;
--- EXECUTE format('DROP TABLE %s CASCADE', relation);
-
116
117
+ FOR recin (SELECT*FROM pg_inheritsWHERE inhparent= relation::regclass::oid)
118
+ LOOP
119
+ EXECUTE format('DROP TABLE %s',rec.inhrelid::regclass::text);
120
+ END LOOP;
121
122
-- FOR rec in (SELECT * FROM pg_inherits WHERE inhparent = relation::regclass::oid)
123
-- LOOP
124
-- EXECUTE format('DROP FUNCTION IF EXISTS %s_hash_update_trigger_func() CASCADE'
sql/init.sql
@@ -110,26 +110,23 @@ LANGUAGE plpgsql;
CREATEOR REPLACE FUNCTION @extschema@.validate_relname(relnameTEXT)
RETURNSTEXTAS
$$
-DECLARE
- retTEXT :=lower(relname);
- IF NOT ret ~'^([a-z_]+[a-z0-9_]*)\.([a-z_]+[a-z0-9_]*)$' THEN
- RAISE EXCEPTION'Incorrect relation name. It must be fully qualified: <schema>.<relname>';
- END IF;
- RETURN ret;
+ RETURN @extschema@.get_schema_qualified_name(relname::regclass,'.');
END
LANGUAGE plpgsql;
125
/*
126
- *
+ * Returns schema-qualified name for table
127
*/
128
-CREATEOR REPLACE FUNCTION @extschema@.get_schema_qualified_name(cls regclass)
+CREATEOR REPLACE FUNCTION @extschema@.get_schema_qualified_name(
+ cls REGCLASS
+ , delimiterTEXT DEFAULT'_')
129
130
131
132
- RETURN relnamespace::regnamespace||'_'|| relnameFROM pg_classWHEREoid= cls::oid;
+ RETURN relnamespace::regnamespace||delimiter|| relnameFROM pg_classWHEREoid= cls::oid;
133
134
135
sql/range.sql
@@ -477,7 +477,7 @@ DECLARE
477
EXECUTE format(''INSERT INTO %%s SELECT $1.*'', v_part_relid::regclass)
478
USING NEW;
479
ELSE
480
- RAISE EXCEPTION''ERROR: Cannotdetermine approprite partition'';
+ RAISE EXCEPTION''ERROR: Cannotfind partition'';
481
END IF;
482
483
RETURN NULL;