Re: how to prepare a create table statement

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: how to prepare a create table statement
Дата
Msg-id CAFj8pRAr69=V+Fq_zFipsz_jVQ-3LHXeXRbM_Tex2yG_62QQDg@mail.gmail.com
обсуждение исходный текст
Ответ на how to prepare a create table statement  (Alexander Mills <alexander.d.mills@gmail.com>)
Список pgsql-bugs


po 4. 1. 2021 v 11:31 odesílatel Alexander Mills <alexander.d.mills@gmail.com> napsal:
I am trying to create 500 partitions using a loop:

do $$
declare
counter integer := 0;
begin
while counter <= 500 loop
PREPARE create_table(int) AS
CREATE TABLE mbk_auth_method_$1 PARTITION OF mbk_auth_method FOR VALUES WITH (modulus 500, remainder $1);
EXECUTE create_table (counter);
counter := counter + 1;
end loop;
end$$;

problem is that a CREATE TABLE cannot be prepared statement..
Anyone know how I can accomplish the above? Seems like this is a missing feature - to prepare a CREATE TABLE statement..

This is a bad idea. You should not use PREPARE statement in plpgsql code ever. Your code looks like from MySQL :)

do $$
begin
  for i in 0..500
  loop
   execute format('CREATE TABLE %I PARTITION OF mbk_auth_method FOR VALUES WITH (modulus 500, remainder %s)',
                  'mbk_auth_method_' || i, i);
  end loop;
end;
$$;

It can be a little bit messy, but EXECUTE from the plpgsql environment is a different statement than EXECUTE from SQL environment. Dynamic statements are "prepared" implicitly in plpgsql. You cannot use  PREPARE there.

Regards

Pavel

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Alexander Mills
Дата:
Сообщение: how to prepare a create table statement
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: how to prepare a create table statement