Postgresql -Вставьте значение, возникшее с ненулевым конфликтом - PullRequest
0 голосов
/ 06 апреля 2020
insert into "StarSchema"."Customer" 
(address,address2,district,postal_code,phone)
select address,address2,district,postal_code,phone
from public.address;

Я пытаюсь вставить значение из другой таблицы в таблицу, которую я только что создал. Но я не знаю, почему есть конфликт ненулевых. Поскольку этот запрос не содержит (customer_id), который является первичным ключом. И у меня не было никакого значения, определенного в схеме, требующего ненулевое значение. Есть несколько значений в address2 и postal_code равны нулю. Когда я удаляю эти два столбца в запросах. Все отлично работает Есть ли способ перенести все столбцы в новую таблицу?

    CREATE TABLE "StarSchema"."Customer"
(
    first_name character varying COLLATE pg_catalog."default",
    last_name character varying COLLATE pg_catalog."default",
    activebool boolean,
    create_date date,
    address character varying COLLATE pg_catalog."default",
    address2 character varying COLLATE pg_catalog."default",
    district character varying COLLATE pg_catalog."default",
    postal_code character varying COLLATE pg_catalog."default",
    city character varying COLLATE pg_catalog."default",
    country character varying COLLATE pg_catalog."default",
    phone character varying COLLATE pg_catalog."default",
    customer_id integer NOT NULL,
    email character varying COLLATE pg_catalog."default",
    active integer,
    CONSTRAINT "Customer_pkey" PRIMARY KEY (customer_id)
)

Информация об ошибке в вопросе: Ошибка: значение NULL нарушает ненулевое ограничение в поле "customer_id"

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Предположительно, вы хотите, чтобы customer_id назначался автоматически. Если это так, определите его как:

customer_id integer generated always as identity primary key,

Или в более старых версиях Postgres:

customer_id serial primary key,

В качестве примечания, обычно я делаю первичный ключ как первым столбец в таблице, а не последний.

0 голосов
/ 06 апреля 2020

Первичные ключи неявно NOT NULL, поэтому вы не можете ввести значение NULL для customer_id. Пропуск столбца в операторе INSERT означает вставку значения по умолчанию, которое в вашем случае равно NULL.

...