Thread: Categories and subcategories : more details
> I have two tables : the first for categories and the second for > subcategories.I want to get a result like Yahoo! For each category , > the sql > query must return maximum 3 subcategories. I can't use "limit" in a > subquery > because I use Postgresql 7.0. Examples : table CATEG : ida categ1 X2 Y3 Z table SUBCATEG : idb subcateg ida 1 x1 1 2 x2 1 3 x3 1 4 x4 1 5 y1 2 6 y2 2 7 z1 3 I 'd like to obtain a table with maximum 2 subcateg per categ : table result : categ subcateg X x1 X x2 Y y1 Y y2 Z z1 any help? Regards, Rachel
Rachel, See below: > Examples : > > table CATEG : > ida categ > 1 X > 2 Y > 3 Z > > table SUBCATEG : > idb subcateg ida > 1 x1 1 > 2 x2 1 > 3 x3 1 > 4 x4 1 > 5 y1 2 > 6 y2 2 > 7 z1 3 > > I 'd like to obtain a table with maximum 2 subcateg per categ : > > table result : > > categ subcateg > X x1 > X x2 > Y y1 > Y y2 > Z z1 > Without LIMIT in subselects, you're in performance hell as far as doing the above is concerned. Frankly, I can't see any way to do it that doesn't involve a PL/pgSQL procedure that generates a temporary table, and has to run once for every row in your result set. I'll post code later if nobody comes up with a better solution. If you knew all of your categories in advance, you could do this via an annoying UNION statement. I'm assuming, however, that it needs to be dynamic. -Josh Berkus -- ______AGLIO DATABASE SOLUTIONS___________________________ Josh Berkus Complete informationtechnology josh@agliodbs.com and data management solutions (415) 565-7293 for law firms, small businesses fax 621-2533 and non-profit organizations. San Francisco
Hi, I have a problem today when I vacuum one table which is vacuumed every today, I tried re_create index also, didn't work. urldb=# VACUUM VERBOSE ANALYZE id; NOTICE: Vacuum: table not found VACUUM urldb=# VACUUM VERBOSE ANALYZE ip; NOTICE: --Relation ip-- NOTICE: Pages 4373: Changed 0, reaped 151, Empty 0, New 0; Tup 662929: Vac 164, Keep/VTL 0/0, Crash 0, UnUsed 23401, MinLen 48, MaxLen 48; Re-using: Free/Avail. Space 1137624/0; EndEmpty/Avail. Pages 150/0. CPU 0.33s/2.28u sec. NOTICE: Index ip_ip: Pages 2093; Tuples 662929: Deleted 0. CPU 0.15s/0.73u sec. NOTICE: Index ip_id: Pages 1311; Tuples 662929: Deleted 0. CPU 0.11s/0.70u sec. NOTICE: Rel ip: Pages: 4373 --> 4223. NOTICE: FlushRelationBuffers(ip, 4223): block 4365 is referenced (private 0, global 8) FATAL 1: VACUUM (vc_vacheap): FlushRelationBuffers returned -2 pqReadData() -- backend closed the channel unexpectedly. This probably means the backend terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. any suggestion?? Jie LIANG St. Bernard Software 10350 Science Center Drive Suite 100, San Diego, CA 92121 Office:(858)320-4873 jliang@ipinc.com www.stbernard.com www.ipinc.com
Jie Liang <jliang@ipinc.com> writes: > NOTICE: FlushRelationBuffers(ip, 4223): block 4365 is referenced (private > 0, global 8) > FATAL 1: VACUUM (vc_vacheap): FlushRelationBuffers returned -2 Try restarting your postmaster. regards, tom lane
Tom, NOTICE: --Relation ip-- NOTICE: Pages 4244: Changed 1, reaped 13, Empty 0, New 0; Tup 665627: Vac 32, Keep/VTL 0/0, Crash 0, UnUsed 594, MinLen 48, MaxLen 48; Re-using: Free/Avail. Space 33168/26016; EndEmpty/Avail. Pages 0/12. CPU 0.32s/2.26u sec. NOTICE: Index ip_ip: Pages 3204; Tuples 665627: Deleted 13. CPU 0.20s/0.80u sec. NOTICE: Index ip_id: Pages 1499; Tuples 665627: Deleted 13. CPU 0.04s/0.81u sec. NOTICE: Rel ip: Pages: 4244 --> 4240; Tuple(s) moved: 13. CPU 0.00s/0.00u sec. NOTICE: Index ip_ip: Pages 3204; Tuples 665627: Deleted 13. CPU 0.19s/0.79u sec. NOTICE: Index ip_id: Pages 1499; Tuples 665627: Deleted 13. CPU 0.09s/0.74u sec. NOTICE: FlushRelationBuffers(ip, 4240): block 4242 is referenced (private 0, global 1) FATAL 1: VACUUM (vc_repair_frag): FlushRelationBuffers returned -2 pqReadData() -- backend closed the channel unexpectedly. This probably means the backend terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. This happen again today, urldb=# select version(); version ------------------------------------------------------------------------- PostgreSQL 7.0.0 on i386-unknown-freebsdelf3.4, compiled by gcc 2.7.2.3 Dose later version such as 7.0.3 resolved this problem?? if so, which version I should install? Jie LIANG St. Bernard Software 10350 Science Center Drive Suite 100, San Diego, CA 92121 Office:(858)320-4873 jliang@ipinc.com www.stbernard.com www.ipinc.com On Tue, 20 Mar 2001, Tom Lane wrote: > Jie Liang <jliang@ipinc.com> writes: > > NOTICE: FlushRelationBuffers(ip, 4223): block 4365 is referenced (private > > 0, global 8) > > FATAL 1: VACUUM (vc_vacheap): FlushRelationBuffers returned -2 > > Try restarting your postmaster. > > regards, tom lane > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly >
Jie Liang <jliang@ipinc.com> writes: > Dose later version such as 7.0.3 resolved this problem?? Possibly. Try it and see. You should be running 7.0.3 anyway, just on general principles. regards, tom lane