Re: Declarative partitioning in pgAdmin4

From: Akshay Joshi <akshay(dot)joshi(at)enterprisedb(dot)com>
To: pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: Re: Declarative partitioning in pgAdmin4
Date: 2017-05-02 13:46:45
Message-ID: CANxoLDdgp46uAZzda+cHBn16YibodXgtyH7O1hp39TKT=cv_ig@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

Hi All

To implement Declarative Partitioning in existing Table dialog
below changes should be implemented:

1. *Icon: *As we have separate icon for view and materialised view, we
should have for partition table. I didn't find any in font awesome.
2. *Inheritance*:
- A partition cannot have any parents other than the partitioned
table it is a partition of, nor can a regular table inherit from a
partitioned table making the latter its parent. That means partitioned
tables and partitions do not participate in inheritance with
regular tables.
- When user creates regular table then Inherited from table(s)
control should not display partitioned table.
3. *Constraints*:
- Primary/Foreign/Unique/Exclusion constraints are not supported on
partitioned table. In that case respective controls should be
disabled for
partitioned table.
- We will have to check which constraints are applicable on
partitions(of partitioned table) still some R&D require. Can someone help
me here.
- For regular tables in Foreign Key constraints tab References
control should not list partition tables.
- Check constraints : cannot add NO INHERIT constraint to partitioned
table, so that control is disabled for partition table.
4. *Advanced Tab*:
- Relation works with partition table theirs is an error if "With
indexes?" is set to Yes, so we need to disabled that for partition table.
- "Has OIDs?" and "Unlogged?" works but not sure about "Fill factor"
and "Of type".
5. *Parameter Tab*:
- Gives error (unrecognized parameter "autovacuum_enabled") for all
parameters of Table Tab and working fine for "Toast Table" it's
working.

Apart from above we will have to do following:

- Required switch control to specify whether it is a regular table or
partitioned table. I have added it on General tab. Please refer
Partition_Switch.png
- Will have to add new tab "Partition" which will have one select2
control to define its Range partition or List partition. Refer
Partition_Tab.png
- Design following controls in *Partition* tab:
- How to add columns in case of Range/List partition? LIST partition
key supports only one column. For RANGE user can specify multiple columns.
- How to specify expression, COLLATE while adding columns
for partition.
- We need subnode control so that user will add number of partition
with there values of the main table. Need lot of R&D for this.
- We will have to provide "Create partition", "Attach Partition" and "
Detech partition" context menu options on Partitions collection node.

Let me know if I forgot something to add that we may need to
handle/implement.

On Thu, Apr 27, 2017 at 9:14 PM, Robert Eckhardt <reckhardt(at)pivotal(dot)io>
wrote:

> The issues we consistently face:
>>>
>>> - The huge (often thousands sometimes tens of thousands) number of
>>> partitions makes rendering all of the partitions painfully slow and
>>> frequently not useful.
>>>
>>> Perhaps, though I doubt that number would be common in Postgres. The
>> problem though, is that there are both stats and sub-objects (indexes and
>> triggers for example) that are part of the child partitions, not the parent
>> - and they may differ from partition to partition.
>>
>
> Certainly there differences in Postgres and Greenplum and this might very
> well be one of those places.
>
>
>> I don't see that we have any choice but to display them so users can work
>> with them.
>>
>
> We don't want to hide them, I do think we want to make accessing them a
> useful experience. If we rephrase this statement as "How might we display
> partitioned tables so that users are able to work with and modify the
> pieces they need?", this opens us up to different opportunities in how we
> display them.
>
> Even with a simple case of 90 days of data partitioned by day, a drop down
> showing 90 tables that are all mostly the same is a little overwhelming.
>
>
>>
>>> - When end users are interested in looking at their partitions they
>>> frequently don't want all of them displayed mindlessly
>>> - They are looking at a subset of partitions
>>> - Partitions are typically grouped around their inheritance
>>> properties.
>>>
>>> How might you propose grouping them (based on the way they work in
>> Postgres)?
>>
>
> Honestly I'm not sure. We didn't really start thinking about this until
> the other day so we are starting to look into the pains that Greenplum
> customers have. Sharing that pain we discover back to the pgAdmin community
> and seeing if it makes sense from a Postgres perspective. After that I
> need to dive into the Postgres implementation.
>
> -- Rob
>

--
*Akshay Joshi*
*Principal Software Engineer *

*Phone: +91 20-3058-9517Mobile: +91 976-788-8246*

Attachment Content-Type Size
Partition_Switch.png image/png 98.2 KB
image/png 68.5 KB

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Dave Page 2017-05-02 14:55:48 Re: Declarative partitioning in pgAdmin4
Previous Message Dave Page 2017-05-02 12:46:27 Re: pgadmin4 on PyPI