Когда я пытаюсь скопировать данные из моей временной таблицы Tperson, он пытается скопировать все данные, а некоторые данные не имеют соответствующего PersonID в Customer.PersonID.PostgreSQL Копирование данных (пытается скопировать данные, которые не соответствуют WHERE)
DROP TABLE IF EXISTS Tperson;
COPY Customer (CustomerID,PersonID) FROM 'C:\Users\DieCriminal\Desktop\data\Customer.txt' CSV HEADER;
CREATE TEMPORARY TABLE Tperson(PersonID integer,Title text,FirstName text,LastName text);
COPY Tperson FROM 'C:\Users\DieCriminal\Desktop\data\Person.txt' CSV HEADER;
INSERT INTO Customer (Person.PersonID,Person.Title,Person.FirstName,Person.LastName)
SELECT Tperson.PersonID,Tperson.Title,Tperson.FirstName,Tperson.LastName
From Tperson,Customer
WHERE Customer.PersonID = Tperson.PersonID;
SELECT *
FROM Customer;
Так заканчивается так:
ERROR: null value in column "customerid" violates not-null constraint
DETAIL: Failing row contains (null, null, (291,Mr.,Gustavo,Achong,)).
********** Error **********
ERROR: null value in column "customerid" violates not-null constraint
SQL state: 23502
Detail: Failing row contains (null, null, (291,Mr.,Gustavo,Achong,)).
Также здесь являются таблицы/типы: (некоторые таблицы/типы будут изменены после загрузки данных)
CREATE TABLE Customer(
CustomerID integer,
PersonID integer,
Person PersonType,
PRIMARY KEY(CustomerID));
CREATE TYPE PersonType AS(
PersonID integer,
Title text,
FirstName text,
LastName text,
Address AddressType[]);
CREATE TYPE AddressType AS(
AddressID integer,
AddressLine1 text,
AddressLine2 text,
City text,
PostalCode text);
I хотите, чтобы он копировал только данные, имеющие соответствующие идентификаторы personID в обеих таблицах. Это то, что я думал, что предложение WHERE будет, но это не так. Так что любой ответ или любое предложение/отзыв о моем коде приветствуются.
В вашей вкладке не указано значение для столбца 'customerid', а в столбце не указано значение по умолчанию, что означает, что вы пытаетесь поместить значение« null »в этот столбец –
Таблица Клиент уже имеет значения для CustomerID , PersonID, потому что Клиент COPY (CustomerID, PersonID) FROM 'C: \ Users \ DieCriminal \ Desktop \ data \ Customer.txt' CSV HEADER; Что я хочу делать с вставкой, это добавить значения в остальные столбцы, где Tperson.PersonID соответствует Customer.PersonID. Моя вставка не должна указывать значение для идентификатора столбца CustomerID. – DieCriminal
Но вы ** вставляете ** новые строки, вы не обновляете существующие. –