Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 обновление записей инсертом  [new]
Alex_Wong
Member

Откуда:
Сообщений: 176
Хочу быстро обновлять значения большой таблицы, правильно ли делать через insert?

Тогда думаю создать колонку в таблице, например n2, которая будет дублировать
значение bigserial в случае, когда вставляется новая запись, а для случаев,
когда запись обновляется инсертом,
- то будет принимать значение
исходной обновляемой записи.

Типа такого:
--------------------------
 n1       n2      infо
--------------------------
  1        1       aaa
  2        2       bbb
  3        1       xxx
  4        4       ccc
  5        2       yyy

здесь обновил: aaa на xxx и bbb на yyy.

т.к. наличие колонки bigserial _primary key не даёт возможность её дубля в колонку n2:
ERROR: ОШИБКА: текущее значение (currval) для последовательности "tb4_idtb4_seq" ещё не определено в этом сеансе,
то можно через nextval() сделать так, что последовательность idtb4 будет идти через раз: 1 3 5 ... вместо: 1 2 3 ...
+ В примере сделал без колонки idtb4 _bigserial _primary key так:

-- DROP TABLE public.tb4;

CREATE TABLE public.tb4
(
    n1 integer,
    n2 integer
)

TABLESPACE pg_default;

ALTER TABLE public.tb4
    OWNER to postgres;



-- DROP SEQUENCE public.tb4_seq;

CREATE SEQUENCE public.tb4_seq
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 2147483647
    CACHE 1;

ALTER SEQUENCE public.tb4_seq
    OWNER TO postgres;


+ Вставка новых записей, так:

insert into tb4(n1,n2) select nextval('tb4_seq'), currval('tb4_seq');
insert into tb4(n1,n2) select nextval('tb4_seq'), currval('tb4_seq');
insert into tb4(n1,n2) select nextval('tb4_seq'), currval('tb4_seq');


здесь опустил колонку info, т.к. вопрос в самом подходе:
будет ли он работать в многопользовательской системе
и как сделать правильно, спасибо.
10 фев 21, 23:08    [22279199]     Ответить | Цитировать Сообщить модератору
 Re: обновление записей инсертом  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4581
Alex_Wong,

Я бы рекомендовал такие вещи через before insert/update триггер решить
а не извращаться



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
10 фев 21, 23:52    [22279211]     Ответить | Цитировать Сообщить модератору
 Re: обновление записей инсертом  [new]
Alex_Wong
Member

Откуда:
Сообщений: 176
Maxim Boguk,

у Вас, случайно, нет примера ?
11 фев 21, 00:00    [22279214]     Ответить | Цитировать Сообщить модератору
 Re: обновление записей инсертом  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4581
Alex_Wong
Maxim Boguk,

у Вас, случайно, нет примера ?


это вы уже совсем разленились ))

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
11 фев 21, 00:16    [22279218]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить