Re: [SQL] Using Ltree For Hierarchical Structures

2013-02-27 Thread Igor Neyman


From: Don Parris [mailto:parri...@gmail.com]
Sent: Tuesday, February 26, 2013 4:55 PM
To: pgsql-sql@postgresql.org
Subject: Re: Using Ltree For Hierarchical Structures



...
I am unaware of the connect_by module, so will have to look into it.
...
Cheers!
Don

For that look into tablefunc Extension.
It also has other useful functions, such as crosstab.

Regards,
Igor Neyman


Re: [SQL] Using Ltree For Hierarchical Structures

2013-02-26 Thread Igor Neyman


From: Don Parris [mailto:parri...@gmail.com] 
Sent: Sunday, February 24, 2013 5:21 PM
To: pgsql-sql@postgresql.org
Subject: Using Ltree For Hierarchical Structures

Hi all,
With many thanks to Misa and others who helped out with my question about 
working with hierarchical data, I have now written a blog post on how I 
implemented the ltree module to solve my problem.

http://dcparris.net/2013/02/24/using-ltree-hierarchical-postgresql/
Frankly, if you work with hierarchical data, I'm not sure I could recommend it 
strongly enough.  I should think that even experienced, advanced SQL gurus 
would appreciate the simplicity ltree offers, when compared to the ugly table 
designs and recursive queries in order to work with hierarchical structures.
I really hope this blog post will help others in the same boat.


Regards,
Don


It's all in the eyes of beholder.
IMHO, recursive CTEs are perfect for hierarchical structures, and much cleaner 
than 2-table design using ltree, that you show in the blog.

Regards,
Igor Neyman




-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] Using Ltree For Hierarchical Structures

2013-02-26 Thread Misa Simic
Hi Igor,

I agree it is all in the eyes of beholder.

Would be good if you can show how to achieve the goal (Summing on Top
Levels categories in hierarchy) with CTE?

For example show all categories in level 2 (x), and sum amounts for each...
(Sum takes all amounts from all transactions of its child categories in any
bellow levels).

I have tested both scenarios - and indexed ltree has given better result -
though there is a possibility I haven't pick best approach to solve the
problem with CTE...

I am just interested in performance - implementation detail is less
important...

Data:

Total number of categories: 1000 (in all levels)
No of Categories in top level: 5
No of categories in level 2: 20
Total number of levels: can vary - max in my testing was 8...


Transaction rows with amounts: 1 000 000


(though I am not sure what u meant by: 2-table design using ltree, and
with CTE there are 2 tables... Categories and Transactions: just in
categories instead of ltree datatype, is integer datatype: parent_id)

Many thanks,

Misa


2013/2/26 Igor Neyman iney...@perceptron.com



 From: Don Parris [mailto:parri...@gmail.com]
 Sent: Sunday, February 24, 2013 5:21 PM
 To: pgsql-sql@postgresql.org
 Subject: Using Ltree For Hierarchical Structures

 Hi all,
 With many thanks to Misa and others who helped out with my question about
 working with hierarchical data, I have now written a blog post on how I
 implemented the ltree module to solve my problem.

 http://dcparris.net/2013/02/24/using-ltree-hierarchical-postgresql/
 Frankly, if you work with hierarchical data, I'm not sure I could
 recommend it strongly enough.  I should think that even experienced,
 advanced SQL gurus would appreciate the simplicity ltree offers, when
 compared to the ugly table designs and recursive queries in order to work
 with hierarchical structures.
 I really hope this blog post will help others in the same boat.


 Regards,
 Don


 It's all in the eyes of beholder.
 IMHO, recursive CTEs are perfect for hierarchical structures, and much
 cleaner than 2-table design using ltree, that you show in the blog.

 Regards,
 Igor Neyman




 --
 Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
 To make changes to your subscription:
 http://www.postgresql.org/mailpref/pgsql-sql



Re: [SQL] Using Ltree For Hierarchical Structures

2013-02-26 Thread Don Parris
Hi Igor,

As Misa points out, my original design used 2 tables - category 
line-items.  Either way it's two tables.The biggest difference lies in
the approach to summing line-items by various levels of category - with
each branch of the tree having different levels.

I cannot speak to performance, but understanding CTEs has been difficult
for me.  Ltree is so much simpler.  I am certain there is a place for CTEs,
but why torture myself trying to hash out a CTE when ltree makes the
queries so much easier to write?

On Feb 26, 2013 11:14 AM, Misa Simic misa.si...@gmail.com wrote:

 Hi Igor,

 I agree it is all in the eyes of beholder.

 Would be good if you can show how to achieve the goal (Summing on Top
Levels categories in hierarchy) with CTE?

 For example show all categories in level 2 (x), and sum amounts for
each... (Sum takes all amounts from all transactions of its child
categories in any bellow levels).

 I have tested both scenarios - and indexed ltree has given better result
- though there is a possibility I haven't pick best approach to solve the
problem with CTE...

 I am just interested in performance - implementation detail is less
important...

 Data:

 Total number of categories: 1000 (in all levels)
 No of Categories in top level: 5
 No of categories in level 2: 20
 Total number of levels: can vary - max in my testing was 8...


 Transaction rows with amounts: 1 000 000


 (though I am not sure what u meant by: 2-table design using ltree, and
with CTE there are 2 tables... Categories and Transactions: just in
categories instead of ltree datatype, is integer datatype: parent_id)

 Many thanks,

 Misa


 2013/2/26 Igor Neyman iney...@perceptron.com



 From: Don Parris [mailto:parri...@gmail.com]
 Sent: Sunday, February 24, 2013 5:21 PM
 To: pgsql-sql@postgresql.org
 Subject: Using Ltree For Hierarchical Structures

 Hi all,
 With many thanks to Misa and others who helped out with my question
about working with hierarchical data, I have now written a blog post on how
I implemented the ltree module to solve my problem.

 http://dcparris.net/2013/02/24/using-ltree-hierarchical-postgresql/
 Frankly, if you work with hierarchical data, I'm not sure I could
recommend it strongly enough.  I should think that even experienced,
advanced SQL gurus would appreciate the simplicity ltree offers, when
compared to the ugly table designs and recursive queries in order to work
with hierarchical structures.
 I really hope this blog post will help others in the same boat.


 Regards,
 Don


 It's all in the eyes of beholder.
 IMHO, recursive CTEs are perfect for hierarchical structures, and much
cleaner than 2-table design using ltree, that you show in the blog.

 Regards,
 Igor Neyman




 --
 Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
 To make changes to your subscription:
 http://www.postgresql.org/mailpref/pgsql-sql




Re: [SQL] Using Ltree For Hierarchical Structures

2013-02-26 Thread Thomas Kellerer

Don Parris wrote on 24.02.2013 23:20:

With many thanks to Misa and others who helped out with my question
about working with hierarchical data, I have now written a blog post
on how I implemented the ltree module to solve my problem.

http://dcparris.net/2013/02/24/using-ltree-hierarchical-postgresql/

Frankly, if you work with hierarchical data, I'm not sure I could
recommend it strongly enough.  I should think that even experienced,
advanced SQL gurus would appreciate the simplicity ltree offers, when
compared to the ugly table designs and recursive queries in order to
work with hierarchical structures.

I really hope this blog post will help others in the same boat.



How do you ensure referential integrity with this approach?
(i.e. make sure that all elements from the path column actually point to an 
existing category)

Thomas




--
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] Using Ltree For Hierarchical Structures

2013-02-26 Thread Igor Neyman


From: Don Parris [mailto:parri...@gmail.com] 
Sent: Tuesday, February 26, 2013 1:23 PM
To: Misa Simic
Cc: Igor Neyman; pgsql-sql@postgresql.org
Subject: Re: [SQL] Using Ltree For Hierarchical Structures

Hi Igor, 
As Misa points out, my original design used 2 tables - category  line-items.  
Either way it's two tables.    The biggest difference lies in the approach to 
summing line-items by various levels of category - with each branch of the tree 
having different levels.
I cannot speak to performance, but understanding CTEs has been difficult for 
me.  Ltree is so much simpler.  I am certain there is a place for CTEs, but why 
torture myself trying to hash out a CTE when ltree makes the queries so much 
easier to write?


Don,

To answer this question...
Before I worked (mostly) with Oracle which has connect by construct to work 
with hierarchies.
So, when I switched to Postgres I was happy to find connect_by contrib. modul.
And with more recent PG versions, it was just natural transition from contrib. 
module to recursive CTEs.

Igor



-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] Using Ltree For Hierarchical Structures

2013-02-26 Thread Don Parris
On Tue, Feb 26, 2013 at 2:30 PM, Igor Neyman iney...@perceptron.com wrote:



 From: Don Parris [mailto:parri...@gmail.com]
 Sent: Tuesday, February 26, 2013 1:23 PM
 To: Misa Simic
 Cc: Igor Neyman; pgsql-sql@postgresql.org
 Subject: Re: [SQL] Using Ltree For Hierarchical Structures

 Hi Igor,
 As Misa points out, my original design used 2 tables - category 
 line-items.  Either way it's two tables.The biggest difference lies in
 the approach to summing line-items by various levels of category - with
 each branch of the tree having different levels.
 I cannot speak to performance, but understanding CTEs has been difficult
 for me.  Ltree is so much simpler.  I am certain there is a place for CTEs,
 but why torture myself trying to hash out a CTE when ltree makes the
 queries so much easier to write?


 Don,

 To answer this question...
 Before I worked (mostly) with Oracle which has connect by construct to
 work with hierarchies.
 So, when I switched to Postgres I was happy to find connect_by contrib.
 modul.
 And with more recent PG versions, it was just natural transition from
 contrib. module to recursive CTEs.

 Igor


That is helpful to know.  I am unaware of the connect_by module, so will
have to look into it.  It is good to know about Oracle's Connect By
construct - I wondered how they dealt with that.  If nothing else, I am
learning more about CTE's.  This whole thread came about because, while I
am normally able to look at example code and translate that into my
particular problem, I really got myself in over my head with this category
tree.  Most of my queries have been fairly simple so far, but this one
stumped me due to my lack of experience.

In the meanwhile, I think understanding CTEs is probably still an important
skill, so I am sure I should be familiar with both.  I greatly appreciate
everyone's contributions - I am learning a great deal here.  It's one of
the reasons why I post my blog stories - to give back a little something of
what I've discovered and learned.  Misa gave me an example of CTE code to
play around with, and I am going to tackle that in more depth later this
week.

Cheers!
Don

-- 
D.C. Parris, FMP, Linux+, ESL Certificate
Minister, Security/FM Coordinator, Free Software Advocate
http://dcparris.net/
https://www.xing.com/profile/Don_Parrishttp://www.linkedin.com/in/dcparris
GPG Key ID: F5E179BE


Re: [SQL] Using Ltree For Hierarchical Structures

2013-02-26 Thread Misa Simic
2013/2/26 Thomas Kellerer spam_ea...@gmx.net

 Don Parris wrote on 24.02.2013 23:20:

  With many thanks to Misa and others who helped out with my question
 about working with hierarchical data, I have now written a blog post
 on how I implemented the ltree module to solve my problem.

 http://dcparris.net/2013/02/**24/using-ltree-hierarchical-**postgresql/http://dcparris.net/2013/02/24/using-ltree-hierarchical-postgresql/

 Frankly, if you work with hierarchical data, I'm not sure I could
 recommend it strongly enough.  I should think that even experienced,
 advanced SQL gurus would appreciate the simplicity ltree offers, when
 compared to the ugly table designs and recursive queries in order to
 work with hierarchical structures.

 I really hope this blog post will help others in the same boat.


 How do you ensure referential integrity with this approach?
 (i.e. make sure that all elements from the path column actually point to
 an existing category)

 Thomas


Hi Thomas,

Yes we met that problem and it further makes deeper problems... i.e. what
if  some category in up level - change his parent (updated path field) -
path must be changed for all childs...

Of several solutions - we have picked to use the best from both worlds...

So we still use - parent_id column... and ltree is used just as
materialized path - to improve performance... I think Materialized Views
what comming in 9.3 - (I still havent seen how it works) -  will help in
that way - we will see...