다중 행 업데이트에서 NULL 유형 캐스팅
PostgreSQL에서 여러 행에 대해 업데이트 쿼리를 실행하면 NULL을 처리할 때 오류가 발생할 수 있습니다. 열 유형이 명시적으로 캐스트되지 않은 경우 값입니다. 이 문서에서는 이 문제에 대한 몇 가지 해결 방법을 살펴보고 다중 행 업데이트 중에 적절한 유형 캐스팅을 보장하기 위한 대체 접근 방식을 제공합니다.
해결 방법 1: VALUES 및 UNION ALL을 사용하여 제한 0을 선택
UPDATE foo f SET x = t.x , y = t.y FROM ( (SELECT pkid, x, y FROM foo LIMIT 0) -- Get column types UNION ALL VALUES (1, 20, NULL) -- No type casts , (2, 50, NULL) ) t -- Column names and types defined WHERE f.pkid = t.pkid;
이 방법은 SELECT 문을 LIMIT 0과 결합하여 열 이름과 유형을 검색한 다음 UNION ALL 연산자. 하위 쿼리의 첫 번째 행은 후속 행에 대해 적절한 열 유형이 정의되었는지 확인합니다.
해결책 2: VALUES 및 UNION ALL SELECT를 사용하여 Limit 0을 선택합니다
UPDATE foo f SET x = t.x , y = t.y FROM ( (SELECT pkid, x, y FROM foo LIMIT 0) -- Get column types UNION ALL SELECT 1, 20, NULL UNION ALL SELECT 2, 50, NULL ) t -- Column names and types defined WHERE f.pkid = t.pkid;
솔루션 1과 유사하게 이 접근 방식은 SELECT를 사용하여 열 유형을 가져온 다음 개별 SELECT 문을 사용하여 데이터 행을 추가하여 조기 오류를 방지합니다. 유형 캐스팅.
솔루션 3: 열별 유형을 사용하는 VALUES 표현식
UPDATE foo f SET x = t.x , y = t.y FROM ( VALUES ((SELECT pkid FROM foo LIMIT 0) , (SELECT x FROM foo LIMIT 0) , (SELECT y FROM foo LIMIT 0)) -- Get type for each col individually , (1, 20, NULL) , (2, 50, NULL) ) t (pkid, x, y) -- Columns names not defined yet, only types. ...
이 솔루션은 VALUES 표현식 자체 내에서 열 유형을 정의하여 후속 항목이 행은 자동 유형으로 인해 오류가 발생하지 않고 해당 유형으로 캐스팅됩니다. 가정.
해결책 4: 행 유형이 있는 VALUES 표현식
UPDATE foo f SET x = (t.r).x -- Parenthesis for unambiguous syntax , y = (t.r).y FROM ( VALUES ('(1,20,)'::foo) -- Columns need to be in table default order ,('(2,50,)') -- Nothing after last comma for NULL ) t (r) -- Column name for row type WHERE f.pkid = (t.r).pkid;
이 접근 방식은 특정 테이블의 행 유형을 사용하므로 열을 올바른 테이블로 캐스팅할 수 있습니다. 암시적으로 유형을 지정합니다. 필드 선택 구문을 사용하여 개별 열 값에 액세스할 수 있습니다.
해결책 5: 분해된 행 유형을 사용하는 VALUES 표현식
UPDATE foo f SET x = t.x , y = t.y FROM ( VALUES (('(1,20,)'::foo).*) -- Decomposed row of values , (2, 50, NULL) ) t(pkid, x, y) -- Arbitrary column names (match table columns) WHERE f.pkid = t.pkid; -- Eliminates 1st row with NULL values
해결책 4와 유사하지만 분해된 행을 사용 데이터 값을 지정합니다. 이를 통해 관련 열만 제공할 수 있으므로 테이블에 있는 모든 열의 전체 순서와 유형을 알 필요가 없습니다.
최적의 솔루션 선택은 성능, 편의성, 가용성과 같은 요소에 따라 달라집니다. 열 유형에 대한 정보입니다.
위 내용은 PostgreSQL 다중 행 업데이트에서 NULL 유형 캐스팅을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!