pg_inh_prefix.patch
text/x-diff
Filename: pg_inh_prefix.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/utils/adt/ruleutils.c | 6 | 1 |
| src/test/regress/expected/inherit.out | 10 | 10 |
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 9ad54c5..2e87183 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -3858,21 +3858,26 @@ get_variable(Var *var, int levelsup, bool showstar, deparse_context *context)
return NULL;
}
/* Identify names to use */
schemaname = NULL; /* default assumptions */
refname = rte->eref->aliasname;
/* Exceptions occur only if the RTE is alias-less */
if (rte->alias == NULL)
{
- if (rte->rtekind == RTE_RELATION)
+ /*
+ * If the rel has been renamed since the rule was made, that's
+ * equivalent to having a alias.
+ */
+ if (rte->rtekind == RTE_RELATION &&
+ strcmp(refname, get_relation_name(rte->relid)) == 0)
{
/*
* It's possible that use of the bare refname would find another
* more-closely-nested RTE, or be ambiguous, in which case we need
* to specify the schemaname to avoid these errors.
*/
if (find_rte_by_refname(rte->eref->aliasname, context) != rte)
schemaname = get_namespace_name(get_rel_namespace(rte->relid));
}
else if (rte->rtekind == RTE_JOIN)
diff --git a/src/test/regress/expected/inherit.out b/src/test/regress/expected/inherit.out
index 7e8f572..d47aeea 100644
--- a/src/test/regress/expected/inherit.out
+++ b/src/test/regress/expected/inherit.out
@@ -1001,58 +1001,58 @@ explain (verbose, costs off) select * from matest0 order by 1-id;
---------------------------------------------------------------------------------
Sort
Output: public.matest0.id, public.matest0.name, ((1 - public.matest0.id))
Sort Key: ((1 - public.matest0.id))
-> Result
Output: public.matest0.id, public.matest0.name, (1 - public.matest0.id)
-> Append
-> Seq Scan on public.matest0
Output: public.matest0.id, public.matest0.name
-> Seq Scan on public.matest1 matest0
- Output: public.matest0.id, public.matest0.name
+ Output: matest0.id, matest0.name
-> Seq Scan on public.matest2 matest0
- Output: public.matest0.id, public.matest0.name
+ Output: matest0.id, matest0.name
-> Seq Scan on public.matest3 matest0
- Output: public.matest0.id, public.matest0.name
+ Output: matest0.id, matest0.name
(14 rows)
select * from matest0 order by 1-id;
id | name
----+--------
6 | Test 6
5 | Test 5
4 | Test 4
3 | Test 3
2 | Test 2
1 | Test 1
(6 rows)
reset enable_indexscan;
set enable_seqscan = off; -- plan with fewest seqscans should be merge
explain (verbose, costs off) select * from matest0 order by 1-id;
- QUERY PLAN
----------------------------------------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------------------------------
Result
Output: public.matest0.id, public.matest0.name, ((1 - public.matest0.id))
-> Merge Append
Sort Key: ((1 - public.matest0.id))
-> Index Scan using matest0i on public.matest0
Output: public.matest0.id, public.matest0.name, (1 - public.matest0.id)
-> Index Scan using matest1i on public.matest1 matest0
- Output: public.matest0.id, public.matest0.name, (1 - public.matest0.id)
+ Output: matest0.id, matest0.name, (1 - matest0.id)
-> Sort
- Output: public.matest0.id, public.matest0.name, ((1 - public.matest0.id))
- Sort Key: ((1 - public.matest0.id))
+ Output: matest0.id, matest0.name, ((1 - matest0.id))
+ Sort Key: ((1 - matest0.id))
-> Seq Scan on public.matest2 matest0
- Output: public.matest0.id, public.matest0.name, (1 - public.matest0.id)
+ Output: matest0.id, matest0.name, (1 - matest0.id)
-> Index Scan using matest3i on public.matest3 matest0
- Output: public.matest0.id, public.matest0.name, (1 - public.matest0.id)
+ Output: matest0.id, matest0.name, (1 - matest0.id)
(15 rows)
select * from matest0 order by 1-id;
id | name
----+--------
6 | Test 6
5 | Test 5
4 | Test 4
3 | Test 3
2 | Test 2