Re: using pg_tables and tablename in queries - Mailing list pgsql-sql
From | Jim Buttafuoco |
---|---|
Subject | Re: using pg_tables and tablename in queries |
Date | |
Msg-id | 20051005005916.M89424@contactbda.com Whole thread Raw |
In response to | Re: using pg_tables and tablename in queries (solarsail <solarsail@gmail.com>) |
List | pgsql-sql |
again, do you really want to join the tables or do a UNION ALL. From one of your posts you said the table were the same. you need to do something like select * from table_001 union all select * from table_002 ... select * from table_999 I would do this in a set returning function looping of an EXECUTE. If you need help, post the schema for a couple of your tables and I will help with the function Jim ---------- Original Message ----------- From: solarsail <solarsail@gmail.com> To: Yasir Malik <ymalik@cs.stevens.edu> Cc: PostgreSQL <pgsql-sql@postgresql.org> Sent: Tue, 4 Oct 2005 15:50:39 -0400 Subject: Re: [SQL] using pg_tables and tablename in queries > I managed to make this work as sub query before... I wish I had > written it down somewhere... > > Regarding the creation of a function. I do have a function that > almost does that. I'm having a hard time getting it to return a set > of records from the EXECUTE command ( more than one row returned by > the select * ...). > > If I generate a temporary table instead of returning the results how > long will that table exist for? Excuse the OOP terminology but would > it be correct to create a 'Singleton' to access the temporary table, > where if it exists and is less than 30 minutes old use that one, > otherwise drop the table and recreate it? > > Thanks > > -- sample function.. > > CREATE OR REPLACE FUNCTION testfunc_jointables() > RETURNS SETOF record AS > $BODY$ > DECLARE > query TEXT; > BEGIN > query := 'auditrecord'; > > FOR > atablename IN select * from pg_tables where tablename like 'mytable_%' > LOOP > > query := query || ', ' || quote_ident(atablename.tablename); > > END LOOP; > > EXECUTE ' SELECT * from ' || query; > > END; > > On 10/4/05, Yasir Malik <ymalik@cs.stevens.edu> wrote: > > > The current behavior is by design. > > > > > > We use the table as a logging repository. It can get very large 250 000 > > > records. Because of the large number of records that we have in the table we > > > found it was much faster to perform inserts on a smaller table. Our current > > > system rolls the tables over every 12 hours or so, creating a new table with > > > the following behavior: > > > > > > CREATE TABLE mytable_temp {...} > > > > > > ALTER TABLE mytable RENAME TO mytable_back_datetime; > > > ALTER TABLE mytable_temp RENAME TO mytable; > > > > > > I want to join the mytable_back_datetime tables together in order to perform > > > queries against my huge set of data to generate some reports. I'm probably > > > going to create a temporary table with a few indexes to make the reports run > > > faster... however I need to join the tables all together first. > > > > > > > I would create a function that creates a string with a query that includes > > all the tables you need, and call execute on the string. You would loop > > through the all tables from pg_tables and keep on appending the table name > > you need. > > > > Regards, > > Yasir > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 3: Have you checked our extensive FAQ? > > > > http://www.postgresql.org/docs/faq > > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: Don't 'kill -9' the postmaster ------- End of Original Message -------