powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / обновление записей инсертом
4 сообщений из 4, страница 1 из 1
обновление записей инсертом
    #40044223
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу быстро обновлять значения большой таблицы, правильно ли делать через insert?

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

Типа такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
--------------------------
 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 так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
-- 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;



Вставка новых записей, так:
Код: plsql
1.
2.
3.
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, т.к. вопрос в самом подходе:
будет ли он работать в многопользовательской системе
и как сделать правильно, спасибо.
...
Рейтинг: 0 / 0
обновление записей инсертом
    #40044229
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Wong,

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



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
обновление записей инсертом
    #40044231
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

у Вас, случайно, нет примера ?
...
Рейтинг: 0 / 0
обновление записей инсертом
    #40044232
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Wong
Maxim Boguk,

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


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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / обновление записей инсертом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]