Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit06058b6

Browse files
committed
Merge branch 'master' into rel_future_beta
2 parents03becee +c45a95a commit06058b6

9 files changed

+290
-294
lines changed

‎.github/ISSUE_TEMPLATE.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<!--
2+
### IMPORTANT: make sure that you:
3+
4+
- are familiar with [known limitations](https://github.com/postgrespro/pg_pathman/wiki/Known-limitations).
5+
- checked the [faq](https://github.com/postgrespro/pg_pathman/wiki/What-the-FAQ) for common problems.
6+
-->
7+
8+
9+
###Problem description
10+
11+
Explain your problem here (it's always better to provide reproduction steps) ...
12+
13+
14+
15+
###Environment
16+
17+
<!-- Put the result of (SELECT * FROM pg_extension) below-->
18+
19+
<!-- Put the result of (SELECT version()) below-->
20+
21+
<!-- For Postgres Pro: put the result of (SELECT pgpro_version()) below-->
22+
23+
<!-- For Postgres Pro: put the result of (SELECT pgpro_edition()) below-->
24+
25+
<!-- For pg_pathman 1.4: put the result of (SELECT get_pathman_lib_version()) below-->
26+
27+
<!-- For pg_pathman 1.5: put the result of (SELECT pathman_version()) below-->
28+

‎expected/pathman_utility_stmt.out

Lines changed: 24 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -24,70 +24,6 @@ VACUUM FULL copy_stmt_hooking.test_1;
2424
VACUUM FULL copy_stmt_hooking.test_2;
2525
VACUUM FULL copy_stmt_hooking.test_3;
2626
VACUUM FULL copy_stmt_hooking.test_4;
27-
/* COPY TO */
28-
COPY copy_stmt_hooking.test TO stdout;
29-
1comment\N\N
30-
2comment\N\N
31-
3comment\N\N
32-
4comment\N\N
33-
5comment\N\N
34-
6comment\N\N
35-
7comment\N\N
36-
8comment\N\N
37-
9comment\N\N
38-
10comment\N\N
39-
11comment\N\N
40-
12comment\N\N
41-
13comment\N\N
42-
14comment\N\N
43-
15comment\N\N
44-
16comment\N\N
45-
17comment\N\N
46-
18comment\N\N
47-
19comment\N\N
48-
20comment\N\N
49-
\copy copy_stmt_hooking.test to stdout (format csv)
50-
1,comment,,
51-
2,comment,,
52-
3,comment,,
53-
4,comment,,
54-
5,comment,,
55-
6,comment,,
56-
7,comment,,
57-
8,comment,,
58-
9,comment,,
59-
10,comment,,
60-
11,comment,,
61-
12,comment,,
62-
13,comment,,
63-
14,comment,,
64-
15,comment,,
65-
16,comment,,
66-
17,comment,,
67-
18,comment,,
68-
19,comment,,
69-
20,comment,,
70-
\copy copy_stmt_hooking.test(comment) to stdout
71-
comment
72-
comment
73-
comment
74-
comment
75-
comment
76-
comment
77-
comment
78-
comment
79-
comment
80-
comment
81-
comment
82-
comment
83-
comment
84-
comment
85-
comment
86-
comment
87-
comment
88-
comment
89-
comment
90-
comment
9127
/* DELETE ROWS, COPY FROM */
9228
DELETE FROM copy_stmt_hooking.test;
9329
COPY copy_stmt_hooking.test FROM stdin;
@@ -113,32 +49,30 @@ VACUUM FULL copy_stmt_hooking.test_1;
11349
VACUUM FULL copy_stmt_hooking.test_2;
11450
VACUUM FULL copy_stmt_hooking.test_3;
11551
VACUUM FULL copy_stmt_hooking.test_4;
116-
/* COPY FROM (specified columns) */
117-
COPY copy_stmt_hooking.test (val) TO stdout;
118-
1
119-
6
120-
7
121-
11
122-
16
123-
COPY copy_stmt_hooking.test (val, comment) TO stdout;
124-
1test_1
125-
6test_2
126-
7test_2
127-
11test_3
128-
16test_4
129-
COPY copy_stmt_hooking.test (c3, val, comment) TO stdout;
130-
01test_1
131-
06test_2
132-
07test_2
133-
011test_3
134-
016test_4
135-
COPY copy_stmt_hooking.test (val, comment, c3, c4) TO stdout;
52+
/* COPY TO */
53+
COPY copy_stmt_hooking.test TO stdout;/* not ok */
54+
WARNING: COPY TO will only select rows from parent table "test"
55+
COPY copy_stmt_hooking.test (val) TO stdout;/* not ok */
56+
WARNING: COPY TO will only select rows from parent table "test"
57+
COPY (SELECT * FROM copy_stmt_hooking.test) TO stdout;
58+
1test_100
59+
6test_200
60+
7test_200
61+
11test_300
62+
16test_400
63+
COPY (SELECT * FROM copy_stmt_hooking.test) TO stdout (FORMAT CSV);
64+
1,test_1,0,0
65+
6,test_2,0,0
66+
7,test_2,0,0
67+
11,test_3,0,0
68+
16,test_4,0,0
69+
\copy (SELECT * FROM copy_stmt_hooking.test) TO stdout
13670
1test_100
13771
6test_200
13872
7test_200
13973
11test_300
14074
16test_400
141-
/* COPYTO (partition does not exist, NOT allowed to create partitions) */
75+
/* COPYFROM (partition does not exist, NOT allowed to create partitions) */
14276
SET pg_pathman.enable_auto_partition = OFF;
14377
COPY copy_stmt_hooking.test FROM stdin;
14478
ERROR: no suitable partition for key '21'
@@ -147,7 +81,7 @@ SELECT * FROM copy_stmt_hooking.test WHERE val > 20;
14781
-----+---------+----+----
14882
(0 rows)
14983

150-
/* COPYTO (partition does not exist, allowed to create partitions) */
84+
/* COPYFROM (partition does not exist, allowed to create partitions) */
15185
SET pg_pathman.enable_auto_partition = ON;
15286
COPY copy_stmt_hooking.test FROM stdin;
15387
SELECT * FROM copy_stmt_hooking.test WHERE val > 20;
@@ -194,18 +128,18 @@ WHERE attnum > 0 AND attrelid = 'copy_stmt_hooking.test_6'::REGCLASS;
194128
3
195129
(1 row)
196130

197-
/*COPY FROM (test transformed tuples) */
198-
COPYcopy_stmt_hooking.test (val, c3, c4) TO stdout;
131+
/* test transformed tuples */
132+
COPY(SELECT * FROM copy_stmt_hooking.test) TO stdout;
199133
100
200134
600
201135
700
202136
1100
203137
1600
204138
2100
205139
2612
206-
/* COPYTO (insert into table with dropped column) */
140+
/* COPYFROM (insert into table with dropped column) */
207141
COPY copy_stmt_hooking.test(val, c3, c4) FROM stdin;
208-
/* COPYTO (insert into table without dropped column) */
142+
/* COPYFROM (insert into table without dropped column) */
209143
COPY copy_stmt_hooking.test(val, c3, c4) FROM stdin;
210144
/* check tuples from last partition (without dropped column) */
211145
SELECT *, tableoid::REGCLASS FROM copy_stmt_hooking.test ORDER BY val;

‎sql/pathman_utility_stmt.sql

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,6 @@ VACUUM FULL copy_stmt_hooking.test_2;
2828
VACUUM FULLcopy_stmt_hooking.test_3;
2929
VACUUM FULLcopy_stmt_hooking.test_4;
3030

31-
/* COPY TO*/
32-
COPYcopy_stmt_hooking.test TO stdout;
33-
\copycopy_stmt_hooking.test to stdout (format csv)
34-
\copycopy_stmt_hooking.test(comment) to stdout
35-
3631
/* DELETE ROWS, COPY FROM*/
3732
DELETEFROMcopy_stmt_hooking.test;
3833
COPYcopy_stmt_hooking.testFROM stdin;
@@ -52,20 +47,21 @@ VACUUM FULL copy_stmt_hooking.test_2;
5247
VACUUM FULLcopy_stmt_hooking.test_3;
5348
VACUUM FULLcopy_stmt_hooking.test_4;
5449

55-
/* COPY FROM (specified columns)*/
56-
COPYcopy_stmt_hooking.test (val) TO stdout;
57-
COPYcopy_stmt_hooking.test (val, comment) TO stdout;
58-
COPYcopy_stmt_hooking.test (c3, val, comment) TO stdout;
59-
COPYcopy_stmt_hooking.test (val, comment, c3, c4) TO stdout;
50+
/* COPY TO*/
51+
COPYcopy_stmt_hooking.test TO stdout;/* not ok*/
52+
COPYcopy_stmt_hooking.test (val) TO stdout;/* not ok*/
53+
COPY (SELECT*FROMcopy_stmt_hooking.test) TO stdout;
54+
COPY (SELECT*FROMcopy_stmt_hooking.test) TO stdout (FORMAT CSV);
55+
\copy (SELECT*FROMcopy_stmt_hooking.test) TO stdout
6056

61-
/* COPYTO (partition does not exist, NOT allowed to create partitions)*/
57+
/* COPYFROM (partition does not exist, NOT allowed to create partitions)*/
6258
SETpg_pathman.enable_auto_partition= OFF;
6359
COPYcopy_stmt_hooking.testFROM stdin;
6460
21test_no_part00
6561
\.
6662
SELECT*FROMcopy_stmt_hooking.testWHERE val>20;
6763

68-
/* COPYTO (partition does not exist, allowed to create partitions)*/
64+
/* COPYFROM (partition does not exist, allowed to create partitions)*/
6965
SETpg_pathman.enable_auto_partition=ON;
7066
COPYcopy_stmt_hooking.testFROM stdin;
7167
21test_no_part00
@@ -98,16 +94,16 @@ WHERE attnum > 0 AND attrelid = 'copy_stmt_hooking.test'::REGCLASS;
9894
SELECTcount(*)FROM pg_attribute
9995
WHERE attnum>0AND attrelid='copy_stmt_hooking.test_6'::REGCLASS;
10096

97+
/* test transformed tuples*/
98+
COPY (SELECT*FROMcopy_stmt_hooking.test) TO stdout;
10199

102-
/* COPY FROM (test transformed tuples)*/
103-
COPYcopy_stmt_hooking.test (val, c3, c4) TO stdout;
104100

105-
/* COPYTO (insert into table with dropped column)*/
101+
/* COPYFROM (insert into table with dropped column)*/
106102
COPYcopy_stmt_hooking.test(val, c3, c4)FROM stdin;
107103
212
108104
\.
109105

110-
/* COPYTO (insert into table without dropped column)*/
106+
/* COPYFROM (insert into table without dropped column)*/
111107
COPYcopy_stmt_hooking.test(val, c3, c4)FROM stdin;
112108
2712
113109
\.

‎src/hooks.c

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@
3737
#include"utils/lsyscache.h"
3838

3939

40+
#ifdefUSE_ASSERT_CHECKING
41+
#defineUSE_RELCACHE_LOGGING
42+
#endif
43+
44+
4045
/* Borrowed from joinpath.c */
4146
#definePATH_PARAM_BY_REL(path,rel) \
4247
((path)->param_info && bms_overlap(PATH_REQ_OUTER(path), (rel)->relids))
@@ -816,6 +821,18 @@ pathman_relcache_hook(Datum arg, Oid relid)
816821
if (!IsPathmanReady())
817822
return;
818823

824+
/* Special case: flush whole relcache */
825+
if (relid==InvalidOid)
826+
{
827+
delay_invalidation_whole_cache();
828+
829+
#ifdefUSE_RELCACHE_LOGGING
830+
elog(DEBUG2,"Invalidation message for all relations [%u]",MyProcPid);
831+
#endif
832+
833+
return;
834+
}
835+
819836
/* We shouldn't even consider special OIDs */
820837
if (relid<FirstNormalObjectId)
821838
return;
@@ -835,16 +852,20 @@ pathman_relcache_hook(Datum arg, Oid relid)
835852
{
836853
delay_invalidation_parent_rel(parent_relid);
837854

855+
#ifdefUSE_RELCACHE_LOGGING
838856
elog(DEBUG2,"Invalidation message for partition %u [%u]",
839857
relid,MyProcPid);
858+
#endif
840859
}
841860
/* We can't say, perform full invalidation procedure */
842861
else
843862
{
844863
delay_invalidation_vague_rel(relid);
845864

846-
elog(DEBUG2,"Invalidation message for vague relation %u [%u]",
865+
#ifdefUSE_RELCACHE_LOGGING
866+
elog(DEBUG2,"Invalidation message for vague rel %u [%u]",
847867
relid,MyProcPid);
868+
#endif
848869
}
849870
}
850871

@@ -894,7 +915,7 @@ pathman_process_utility_hook(Node *first_arg,
894915
stmt_location,stmt_len,&processed);
895916
if (completionTag)
896917
snprintf(completionTag,COMPLETION_TAG_BUFSIZE,
897-
"PATHMANCOPY "UINT64_FORMAT,processed);
918+
"COPY "UINT64_FORMAT,processed);
898919

899920
return;/* don't call standard_ProcessUtility() or hooks */
900921
}

‎src/include/init.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ typedef struct
5454

5555
#definePATHMAN_MCXT_COUNT4
5656
externMemoryContextTopPathmanContext;
57+
externMemoryContextPathmanInvalJobsContext;
5758
externMemoryContextPathmanRelationCacheContext;
5859
externMemoryContextPathmanParentCacheContext;
5960
externMemoryContextPathmanBoundCacheContext;

‎src/include/relation_info.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ const PartRelationInfo *refresh_pathman_relation_info(Oid relid,
278278
Datum*values,
279279
boolallow_incomplete);
280280
PartRelationInfo*invalidate_pathman_relation_info(Oidrelid,bool*found);
281+
voidinvalidate_pathman_relation_info_cache(constOid*parents,intparents_count);
281282
voidremove_pathman_relation_info(Oidrelid);
282283
constPartRelationInfo*get_pathman_relation_info(Oidrelid);
283284
constPartRelationInfo*get_pathman_relation_info_after_lock(Oidrelid,
@@ -301,6 +302,7 @@ bool is_equal_to_partitioning_expression(Oid relid, char *expression,
301302

302303
/* Global invalidation routines */
303304
voiddelay_pathman_shutdown(void);
305+
voiddelay_invalidation_whole_cache(void);
304306
voiddelay_invalidation_parent_rel(Oidparent);
305307
voiddelay_invalidation_vague_rel(Oidvague_rel);
306308
voidfinish_delayed_invalidation(void);

‎src/init.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343

4444
/* Various memory contexts for caches */
4545
MemoryContextTopPathmanContext=NULL;
46+
MemoryContextPathmanInvalJobsContext=NULL;
4647
MemoryContextPathmanRelationCacheContext=NULL;
4748
MemoryContextPathmanParentCacheContext=NULL;
4849
MemoryContextPathmanBoundCacheContext=NULL;
@@ -316,6 +317,7 @@ init_local_cache(void)
316317
if (TopPathmanContext)
317318
{
318319
/* Check that child contexts exist */
320+
Assert(MemoryContextIsValid(PathmanInvalJobsContext));
319321
Assert(MemoryContextIsValid(PathmanRelationCacheContext));
320322
Assert(MemoryContextIsValid(PathmanParentCacheContext));
321323
Assert(MemoryContextIsValid(PathmanBoundCacheContext));
@@ -326,6 +328,7 @@ init_local_cache(void)
326328
/* Initialize pg_pathman's memory contexts */
327329
else
328330
{
331+
Assert(PathmanInvalJobsContext==NULL);
329332
Assert(PathmanRelationCacheContext==NULL);
330333
Assert(PathmanParentCacheContext==NULL);
331334
Assert(PathmanBoundCacheContext==NULL);
@@ -335,6 +338,11 @@ init_local_cache(void)
335338
CppAsString(TopPathmanContext),
336339
ALLOCSET_DEFAULT_SIZES);
337340

341+
PathmanInvalJobsContext=
342+
AllocSetContextCreate(TopMemoryContext,
343+
CppAsString(PathmanInvalJobsContext),
344+
ALLOCSET_SMALL_SIZES);
345+
338346
/* For PartRelationInfo */
339347
PathmanRelationCacheContext=
340348
AllocSetContextCreate(TopPathmanContext,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp