Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
21.11.2018, 11:06
|
|||
---|---|---|---|
|
|||
добавить запись в таблицу |
|||
#18+
Добрый день я только пробую Postgree он имеет большое отличие от MSSql в связи с этим прошу помощи. Есть таблица (как данность) CREATE TABLE public.card_clients ( id bigint NOT NULL, firstname character varying(255) COLLATE pg_catalog."default", sendcatalog boolean NOT NULL CONSTRAINT card_clients_pkey PRIMARY KEY (id) ) WITH ( OIDS = FALSE ) TABLESPACE pg_default; ALTER TABLE public.card_clients OWNER to postgres; требуется вставить строку со следующим порядковым номером ID запрос такого плана INSERT INTO public.card_clients( firstname, sendcatalog) VALUES ('zzzzzzzzzzz', false); возвращает ошибку ERROR: ОШИБКА: нулевое значение в столбце "id" нарушает ограничение NOT NULL Ну оно и понятно. А как сделать чтобы при insert генерился след номер ID (который надо знать для дальнейшего использования) не изменяя структуру таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.11.2018, 11:18
|
|||
---|---|---|---|
добавить запись в таблицу |
|||
#18+
HarrySmith, 1. CREATE SEQUENCE card_clients_id; ALTER TABLE card_clients ALTER id SET DEFAULT nextval('card_clients_id'); ALTER SEQUENCE card_clients_id OWNED BY card_clients.id; -- свяжет SEQUENCE с таблицей, если таблицу снесут, то и SEQUENCE каскадом тоже 2. При создании таблицы указать `id bigserial NOT NULL`, что будет равносильно тому, что я выше написал (синтаксическая обёртка). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.11.2018, 11:38
|
|||
---|---|---|---|
|
|||
добавить запись в таблицу |
|||
#18+
vyegorovHarrySmith, 1. CREATE SEQUENCE card_clients_id; ALTER TABLE card_clients ALTER id SET DEFAULT nextval('card_clients_id'); ALTER SEQUENCE card_clients_id OWNED BY card_clients.id; -- свяжет SEQUENCE с таблицей, если таблицу снесут, то и SEQUENCE каскадом тоже 2. При создании таблицы указать `id bigserial NOT NULL`, что будет равносильно тому, что я выше написал (синтаксическая обёртка). Задача была "не изменяя структуру таблицы" вообще то. :) -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.11.2018, 11:45
|
|||
---|---|---|---|
|
|||
добавить запись в таблицу |
|||
#18+
HarrySmithА как сделать чтобы при insert генерился след номер ID (который надо знать для дальнейшего использования) не изменяя структуру таблицы? Тогда надо будет изменить сам запрос вставки сделав 1 раз CREATE SEQUENCE card_clients_id; и потом вызывая INSERT INTO public.card_clients( id, firstname, sendcatalog) VALUES (nextval('card_clients_id'),'zzzzzzzzzzz', false) RETURNING id; PS: но да как выше написали лучше структуру таблицы поменять оно менее коряво будет. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.11.2018, 10:06
|
|||
---|---|---|---|
|
|||
добавить запись в таблицу |
|||
#18+
Maxim Boguk, Maxim BogukCREATE SEQUENCE card_clients_id; и потом вызывая INSERT INTO public.card_clients( id, firstname, sendcatalog) VALUES (nextval('card_clients_id'),'zzzzzzzzzzz', false) RETURNING id; отлично затем этим значением надо обновить поле связанной таблицы плана update table set col1=id where key=1 но вот вопрос наверное это все надо делать в транзакции или нет и если да то как? пример транзакции взятый с официального сайта BEGIN update card_clients set building='33' WHERE id=33; COMMIT сразу ругается на ERROR: ОШИБКА: ошибка синтаксиса (примерное положение: "BEGIN") LINE 1: ...,COSTS False,TIMING False,SUMMARY False,BUFFERS False) BEGIN ^ SQL-состояние: 42601 Символ: 104 может не надо транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.11.2018, 12:36
|
|||
---|---|---|---|
добавить запись в таблицу |
|||
#18+
HarrySmithMaxim Boguk, Maxim BogukCREATE SEQUENCE card_clients_id; и потом вызывая INSERT INTO public.card_clients( id, firstname, sendcatalog) VALUES (nextval('card_clients_id'),'zzzzzzzzzzz', false) RETURNING id; отлично затем этим значением надо обновить поле связанной таблицы плана update table set col1=id where key=1 но вот вопрос наверное это все надо делать в транзакции или нет и если да то как? пример транзакции взятый с официального сайта BEGIN update card_clients set building='33' WHERE id=33; COMMIT сразу ругается на ERROR: ОШИБКА: ошибка синтаксиса (примерное положение: "BEGIN") LINE 1: ...,COSTS False,TIMING False,SUMMARY False,BUFFERS False) BEGIN ^ SQL-состояние: 42601 Символ: 104 может не надо транзакции? Может надо посмотреть какие поля есть в таблице и какие в запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.11.2018, 13:16
|
|||
---|---|---|---|
добавить запись в таблицу |
|||
#18+
HarrySmith, BEGIN — такая же команда как и SELECT и её также надо закончить ';' чтобы она отработала. Как и COMMIT. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.11.2018, 10:29
|
|||
---|---|---|---|
|
|||
добавить запись в таблицу |
|||
#18+
не могу сделать CREATE SEQUENCE card_clients_id; валит ошибки ERROR: ОШИБКА: ошибка синтаксиса (примерное положение: "SEQUENCE") LINE 1: ...,TIMING False,SUMMARY False,BUFFERS False) CREATE SEQUENCE c... ^ SQL-состояние: 42601 Символ: 111 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.11.2018, 10:41
|
|||
---|---|---|---|
добавить запись в таблицу |
|||
#18+
HarrySmith, судя по всему у вас слишком глупый клиент к базе (прикидывающийся умным) и делает совсем не то, что просили. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.11.2018, 10:46
|
|||
---|---|---|---|
|
|||
добавить запись в таблицу |
|||
#18+
pgAdmin4 подскажите лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.11.2018, 11:05
|
|||
---|---|---|---|
добавить запись в таблицу |
|||
#18+
HarrySmith, psql ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.11.2018, 11:11
|
|||
---|---|---|---|
добавить запись в таблицу |
|||
#18+
MelkijHarrySmith, psql блокнот жи, чо мелочиться 2ТС вы пытаетесь построить план выполнения, а не выполнить набор команд. а это возможно только для одиночных dml - стейтментов. создание сиквенсов к таким не относится. это уже ddl. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.11.2018, 11:31
|
|||
---|---|---|---|
|
|||
добавить запись в таблицу |
|||
#18+
HarrySmithне могу сделать CREATE SEQUENCE card_clients_id; валит ошибки ERROR: ОШИБКА: ошибка синтаксиса (примерное положение: "SEQUENCE") LINE 1: ...,TIMING False,SUMMARY False,BUFFERS False) CREATE SEQUENCE c... ^ SQL-состояние: 42601 Символ: 111 А вы сами не видите что у вас изза отсутствия ; 2 комманды слились??? скорее всего недописанный explain analyze и CREATE SEQUENCE ЛЮБАЯ sql комманда чтобы она исполнилас должна быть завершена ; -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&tablet=1&tid=1995483]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 137ms |
0 / 0 |