|
добавить запись в таблицу
|
|||
---|---|---|---|
#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:06 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#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:18 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#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:38 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#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 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 11:45 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#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, 10:06 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#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, 12:36 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#18+
HarrySmith, BEGIN — такая же команда как и SELECT и её также надо закончить ';' чтобы она отработала. Как и COMMIT. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 13:16 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#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:29 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#18+
HarrySmith, судя по всему у вас слишком глупый клиент к базе (прикидывающийся умным) и делает совсем не то, что просили. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 10:41 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#18+
pgAdmin4 подскажите лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 10:46 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#18+
HarrySmith, psql ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 11:05 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#18+
MelkijHarrySmith, psql блокнот жи, чо мелочиться 2ТС вы пытаетесь построить план выполнения, а не выполнить набор команд. а это возможно только для одиночных dml - стейтментов. создание сиквенсов к таким не относится. это уже ddl. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 11:11 |
|
добавить запись в таблицу
|
|||
---|---|---|---|
#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 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 11:31 |
|
|
start [/forum/topic.php?fid=53&fpage=48&tid=1995483]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 401ms |
0 / 0 |