Re: create table sintax
От | Taras Kopets |
---|---|
Тема | Re: create table sintax |
Дата | |
Msg-id | BANLkTinmz6=4s4Zi3vpszpH6dCJ39fFHfg@mail.gmail.com обсуждение исходный текст |
Ответ на | create table sintax (Júlio Almeida <julio.augusto.almeida@gmail.com>) |
Список | pgsql-general |
2011/4/19 Júlio Almeida <julio.augusto.almeida@gmail.com> > If I run > create table newtable (like oldtable including constraints); > in the SQL window with works just file. > But if i execute > execute 'create table '||newtable||' (LIKE '||oldtable||' including constraints)'; > inside a function, in a LOOP, the constraints aren't created. > What is the problem? You probably missing something in your function. Please find a simple example that shows how to create a table like other table using function. Remember to use *quote_ident* function when you use database identifiers in dynamic SQL's. BEGIN; CREATE TABLE original ( a integer, b text, c date, CONSTRAINT orginal_ck_text_has_dog CHECK (position('dog' in b) <> 0), CONSTRAINT orginal_ck_date_is_recent CHECK (c >= '2000-01-01'::date) ); insert into original(a, b, c) VALUES(1, 'hot dog', now()); /* error, as expected insert into original(a, b, c) VALUES(2, 'hot cat', now()); */ -- function to copy other table with constraints CREATE OR REPLACE FUNCTION create_table_like(p_orig_table text, p_new_table text) RETURNS VOID AS $BODY$ BEGIN EXECUTE 'CREATE TABLE '||quote_ident(p_new_table) ||' (LIKE '||quote_ident(p_orig_table)||' including constraints)'; RETURN; END; $BODY$ LANGUAGE plpgsql VOLATILE STRICT; -- execute function to create a new table like old one SELECT create_table_like('original'::text, 'copied'::text); insert into copied(a, b, c) VALUES(1, 'hot dog', now()); /* error, as expected insert into copied(a, b, c) VALUES(2, 'hot cat', now()); */ -- ROLLBACK; Hope this helps, Taras Kopets
В списке pgsql-general по дате отправления: