저는 최근에 PostgreSQL을 사용하기 시작했습니다. 그리고 나는 그것을 이해 했으므로 "올바른 방법"으로 일하려고 노력하고 있습니다. 가능한 한 클라이언트가 아닌 데이터베이스 서버에 많은 작업을 넣는 것을 의미합니다.PostgreSQL 삽입은 다른 테이블의 데이터에 따라 다릅니 까?
그래서 테이블에 데이터를 추가하는 PL/pgSQL 함수를 만들었습니다. 그 테이블에 기본 키 제약 조건을 설정했기 때문에 새로운 데이터를 추가하려고 할 때 참조 된 키가 존재하지 않을 수도 있습니다. 예외를 추가하면 키를 생성 한 다음 새로운 행.
이것은 나를 위해 만족 스럽지만,이 "올바른 방법"을 처리하는지 궁금합니다. 나는 이러한 사용자 정의 함수를 설계하는 지침을 찾기 위해 노력했지만 실제로 도움이되는 어떤 것도 찾지 못했습니다.
CREATE OR REPLACE FUNCTION add_product_price_promo_xml(v_product_code varchar, v_description varchar, v_product_group varchar,
v_mixmatch_id integer, v_price_at date, v_cost_price numeric, v_sales_price numeric,
v_tax_rate integer) RETURNS void AS $$
BEGIN
INSERT INTO product_prices (product_code , mixmatch_id , price_at , cost_price , sales_price , tax_rate) VALUES
(v_product_code, v_mixmatch_id, v_price_at, v_cost_price, v_sales_price, v_tax_rate);
EXCEPTION WHEN foreign_key_violation THEN
INSERT INTO products (code, description, product_group) VALUES (v_product_code, v_description, v_product_group);
PERFORM add_product_price_promo_xml($1, $2, $3, $4, $5, $6, $7, $8);
END;
$$ LANGUAGE plpgsql;
가
문제의 데이터베이스는보고를하고 항목 전체 가격 업데이트 및 새 항목 매일 등록 가져 오는 것 사용하는 것입니다,하지만 새로운있는 항목을 알 수 없습니다 어느 사람이 늙은.
@EvanCarrorll, 정확하게 'INSERT INTO ...'질의가 무엇을하고 있는지 설명해 주시겠습니까? – jeffdill2
@ jeffdill2 이것은 현재로서는 좋지 않은 조언이며, 전적으로 업데이트 할 것입니다. –
은 문제가되지 않습니다. 나는 실제로 그것을 알아 냈다. 방금 LEFT JOIN을 사용하고 조인 된 테이블에서 WHERE ... IS NULL을 확인하여 비슷한 접근 방식을 구현했습니다. – jeffdill2