Обсуждение: BUG #2429: Explain does not report object's schema

Поиск
Список
Период
Сортировка

BUG #2429: Explain does not report object's schema

От
"Cristiano da Cunha Duarte"
Дата:
The following bug has been logged online:

Bug reference:      2429
Logged by:          Cristiano da Cunha Duarte
Email address:      cunha17@gmail.com
PostgreSQL version: 8.1
Operating system:   Debian GNU Linux
Description:        Explain does not report object's schema
Details:

1) PROBLEM:

Explain command does not report the schema of objects, so when using objects
having the same name but in different schemas, they will apear as being the
same object.

2) HOW TO REPRODUCE:

EXPLAIN SELECT * FROM schema1.mytable, schema2.mytable WHERE 1=0

3) WHAT IS THE CURRENT BEHAVIOR:

                              QUERY PLAN
-----------------------------------------------------------------------
 Nested Loop  (cost=10.66..500630.90 rows=24422640 width=1498)
   ->  Seq Scan on mytable  (cost=0.00..12167.44 rows=407044 width=264)
   ->  Materialize  (cost=10.66..11.26 rows=60 width=1234)
         ->  Seq Scan on mytable  (cost=0.00..10.60 rows=60 width=1234)
(4 records)

3) WHAT SHOULD BE EXPECTED:

                              QUERY PLAN
-----------------------------------------------------------------------
 Nested Loop  (cost=10.66..500630.90 rows=24422640 width=1498)
   ->  Seq Scan on schema2.mytable  (cost=0.00..12167.44 rows=407044
width=264)
   ->  Materialize  (cost=10.66..11.26 rows=60 width=1234)
         ->  Seq Scan on schema1.mytable  (cost=0.00..10.60 rows=60
width=1234)
(4 records)

4) ADDITIONAL COMMENTS:
I am developing a snapshot project(Pg::snapshots
http://cunha17.theicy.net/personal/postgresql/snapshots.en_us.php) for
postgresql. It currently has refresh (complete, force, fast), snapshot logs,
dblinks, etc.

It's 99% complete, everything works fine, except the refresh fast, since I
need to discover which objects were involved in a SELECT statement. And
that's how I got into this bug.

With the current EXPLAIN implementation, I can't tell the difference between
the two and thus I can't get the list of involved objects correctly, so I
can't get the snapshot log list, and so on.

IMHO, the schema name will add correctness to the EXPLAIN command output.

Re: BUG #2429: Explain does not report object's schema

От
Tom Lane
Дата:
"Cristiano da Cunha Duarte" <cunha17@gmail.com> writes:
> Explain command does not report the schema of objects,

This is intentional.  Most error messages don't mention objects' schemas
either, as it would usually just be clutter.

            regards, tom lane

Re: BUG #2429: Explain does not report object's schema

От
Cristiano Duarte
Дата:
Hi Tom,

Tom Lane wrote:
>> Explain command does not report the schema of objects,
>
> This is intentional.  Most error messages don't mention objects' schemas
> either, as it would usually just be clutter.
Oracle's EXPLAIN PLAN generate lots of information including the operation,
search columns, schema(owner) and object name.

In PostgreSQL, the error message when you issue a select statement from an
unexistent table, reports the schema too:

SELECT * FROM public.unexistent;
ERROR:  relation "public.unexistent" does not exist

In this case the schema name is clutter, since we are dealing with only one
table, but when you have (or may have) many tables with the same exact
name, you must have a way to distinguish one to another.

This problem is much more significant with the EXPLAIN command since we are
reporting the execution plan of postgresql. It may be difficult with the
current output to distinguish between tables with the same name in order to
optimize the query.

I just think that there should be a way to uniquely identify the target
table on the EXPLAIN output, that's why I don't think that a way to fix an
ambiguous output is clutter.

Regards,

Cristiano Duarte

Re: BUG #2429: Explain does not report object's schema

От
Lars Haugseth
Дата:
* cunha17@gmail.com ("Cristiano da Cunha Duarte") wrote:
|
| 1) PROBLEM:
|
| Explain command does not report the schema of objects, so when using objects
| having the same name but in different schemas, they will apear as being the
| same object.
|
| 2) HOW TO REPRODUCE:

Don't know whether this would help in your situation, but you can make the
output of EXPLAIN disambiguous by using table aliases:

EXPLAIN
 SELECT *
   FROM schema1.mytable AS mt1, schema2.mytable AS mt2
  WHERE 1=0

(The AS keyword is optional.)

The aliases will be included in the query plan output.

--
Lars Haugseth

"If anyone disagrees with anything I say, I am quite prepared not only to
 retract it, but also to deny under oath that I ever said it." -Tom Lehrer

Re: BUG #2429: Explain does not report object's schema

От
Cristiano Duarte
Дата:
Hi Lars,

Lars Haugseth wrote:
> * cunha17@gmail.com ("Cristiano da Cunha Duarte") wrote:
> |
> | 1) PROBLEM:
> |
> | Explain command does not report the schema of objects, so when using
> | objects having the same name but in different schemas, they will apear
> | as being the same object.
> |
> | 2) HOW TO REPRODUCE:
>
> Don't know whether this would help in your situation, but you can make the
> output of EXPLAIN disambiguous by using table aliases:
>
> EXPLAIN
>  SELECT *
>    FROM schema1.mytable AS mt1, schema2.mytable AS mt2
>   WHERE 1=0
>
> (The AS keyword is optional.)
>
> The aliases will be included in the query plan output.
>
Thanks for the notice, but to do this, I would have to raise errors on
queries having tables with the same name, which is not what I meant.

But, if there is no other way, I'll do it.