From: | "Yura Gal" <yuragal(at)gmail(dot)com> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: How to creat tables using record ID in for loop |
Date: | 2008-08-07 06:50:34 |
Message-ID: | 3b6c69d80808062350i5ef650f7l9169162c27c0d9b2@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
The function to treate tables is:
CREATE OR REPLACE FUNCTION cr_tbls_by_staid() RETURNS INTEGER AS
$$
DECLARE
stid INTEGER;
q TEXT;
BEGIN
FOR stid IN SELECT staid FROM mytest LOOP
q:= 'CREATE TABLE "s' || staid || '" (staid varchar(50), val real,
dt date);'
RAISE NOTICE 'query is: %', q; --for debug
EXECUTE q;
END LOOP;
RETURN 1;
END;
$$ LANUAGE plpgsql;
However, there are some advices with regards to your question. First,
as Rangar noted, you could fall into scalability issue when create a
couple of millions of tables. You probably should to examine data
design for your DB. For example, you could create the only table like
this:
CREATE TABLE sta_descs (staid varchar(50), val real, dt date) WITHOUT OIDS;
and store there all records you want. Such a table could be easily
joined with mytest by staid. Obviosly, sta_desct.staid have to be
indexed.
Second, take a look at SQL syntax to figure it out how the tables and
fields could be named:
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
PS. I didn't test is function works properly as I have no access to
PgDB right now.
HTH
--
Best regards. Yuri.
From | Date | Subject | |
---|---|---|---|
Next Message | Yura Gal | 2008-08-07 10:29:19 | Re: How to creat tables using record ID in for loop |
Previous Message | Craig Ringer | 2008-08-07 02:05:47 | Re: more than 1000 connections |