43.12. 개발을 위한 팁토토 커뮤니티/pgSQL

개발하는 좋은 방법 중 하나토토 커뮤니티/pgSQL선택한 텍스트 편집기를 사용하여 함수를 생성하고 다른 창에서는 다음을 사용하는 것입니다.psql해당 기능을 로드하고 테스트합니다. 이런 식으로 수행하는 경우 다음을 사용하여 함수를 작성하는 것이 좋습니다.함수 생성 또는 교체. 이렇게 하면 파일을 다시 로드하여 함수 정의를 업데이트할 수 있습니다. 예를 들어:

함수 생성 또는 교체 testfunc(integer) $$로 정수를 반환합니다.
          ....
$$ 언어 plpgsql;

실행 중psql, 다음을 사용하여 이러한 함수 정의 파일을 로드하거나 다시 로드할 수 있습니다.

\i 파일명.sql

그런 다음 즉시 SQL 명령을 실행하여 함수를 테스트합니다.

개발하는 또 다른 좋은 방법토토 커뮤니티/pgSQL은 절차적 언어로 개발을 용이하게 하는 GUI 데이터베이스 액세스 도구입니다. 그러한 도구의 한 예는 다음과 같습니다.pgAdmin, 다른 것도 존재하지만. 이러한 도구는 작은따옴표를 이스케이프 처리하고 함수를 더 쉽게 재생성하고 디버그하는 등의 편리한 기능을 제공하는 경우가 많습니다.

43.12.1. 따옴표 처리

a의 코드토토 커뮤니티/pgSQL함수는 다음에 지정됩니다.함수 생성문자열 리터럴로. 작은따옴표를 둘러싸서 일반적인 방법으로 문자열 리터럴을 작성하는 경우 함수 본문 내부의 모든 작은따옴표를 두 배로 늘려야 합니다. 마찬가지로 모든 백슬래시는 두 배가 되어야 합니다(이스케이프 문자열 구문이 사용된다고 가정). 이중 따옴표는 가장 지루한 일이며, 더 복잡한 경우에는 여섯 개 이상의 인접한 따옴표가 필요할 수 있기 때문에 코드를 완전히 이해할 수 없게 될 수 있습니다. 대신 함수 본문을 다음과 같이 작성하는 것이 좋습니다.달러 인용문자열 리터럴(참조섹션 4.1.2.4). 달러 인용 접근 방식에서는 따옴표를 두 배로 표시하지 않고 대신 필요한 각 중첩 수준에 대해 다른 달러 인용 구분 기호를 선택하도록 주의하십시오. 예를 들어, 다음과 같이 작성할 수 있습니다.함수 생성명령:

함수 생성 또는 교체 testfunc(integer) 정수를 $PROC$로 반환합니다.
          ....
$PROC$ 언어 plpgsql;

이 안에는 SQL 명령의 간단한 리터럴 문자열에 따옴표를 사용할 수 있으며$$문자열로 조합하려는 SQL 명령 조각을 구분합니다. 다음을 포함하는 텍스트를 인용해야 하는 경우$$, 다음을 사용할 수 있습니다.$Q$등.

다음 차트는 달러 인용 없이 인용 부호를 쓸 때 무엇을 해야 하는지 보여줍니다. 달러 이전 인용 코드를 더 이해하기 쉬운 코드로 변환할 때 유용할 수 있습니다.

1개의 따옴표

함수 본문을 시작하고 끝내려면, 예를 들어:

CREATE FUNCTION foo()는 정수를 '로 반환합니다.
          ....
' 언어 토토 커뮤니티pgsql;

작은따옴표로 묶인 함수 본문 내의 모든 위치, 따옴표반드시쌍으로 나타납니다.

2개의 따옴표

함수 본문 내부의 문자열 리터럴의 경우, 예:

a_output := ''어쩌고'';
SELECT * FROM 사용자 WHERE f_name=''foobar'';

달러 인용 방식에서는 다음과 같이 작성하면 됩니다.

a_output := '어쩌고';
SELECT * fROM 사용자 WHERE f_name='foobar';

정확히는 다음과 같습니다토토 커뮤니티/pgSQL파서는 두 경우 모두 볼 수 있습니다.

4개의 따옴표

함수 본문 내부의 문자열 상수에 작은따옴표가 필요한 경우, 예를 들면 다음과 같습니다:

a_output := a_output || '' AND 이름 LIKE ''''foobar'''' AND xyz''

실제로 추가된 값a_output다음과 같습니다:그리고 'foobar' AND xyz와 같은 이름.

달러 인용 방식에서는 다음과 같이 작성합니다:

a_output := a_output || $$ AND 이름 LIKE 'foobar' AND xyz$$

이 주변의 달러 인용 구분 기호는 단지 따옴표가 아니라는 점에 주의하세요.$$.

6개의 따옴표

함수 본문 내부 문자열의 작은따옴표가 해당 문자열 상수의 끝에 인접한 경우, 예:

a_output := a_output || '' AND 이름 LIKE ''''foobar''''''

다음에 추가된 값a_output그러면 다음과 같습니다:그리고 'foobar'와 같은 이름.

달러 인용 방식에서는 다음과 같습니다.

a_output := a_output || $$ 및 'foobar'$$ 같은 이름
10개의 따옴표

문자열 상수(8개의 따옴표에 해당)에 두 개의 작은따옴표를 원하고 이것이 해당 문자열 상수(2개 이상)의 끝에 인접해 있는 경우. 아마도 다음과 같이 다른 함수를 생성하는 함수를 작성하는 경우에만 필요할 것입니다.예 43.10. 예를 들면:

a_output := a_output || '' v_''인 경우 ||
    Referrer_keys.kind || ''처럼 ''''''''''
    || Referrer_keys.key_string || ''''''''''
    그런 다음 ''''''를 반환합니다 || Referrer_keys.referrer_type
    || ''''''; 다음 경우 종료;'';

a_output그러면 다음과 같습니다:

v_...가 ''...''와 같다면 ''...''를 반환합니다. 다음과 같은 경우 종료;

달러 인용 방식에서는 다음과 같습니다.

a_output := a_output || $$ v_$$인 경우 || Referrer_keys.kind || $$는 '$$처럼
    || Referrer_keys.key_string || $$'
    그런 다음 '$$ || Referrer_keys.referrer_type
    || $$'; 다음 경우 종료;$$;

여기서는 작은따옴표만 넣으면 된다고 가정합니다.a_output, 사용하기 전에 다시 인용되기 때문입니다.

43.12.2. 추가 컴파일 시간 및 런타임 확인

사용자가 해를 입기 전에 간단하지만 일반적인 문제의 사례를 찾는 데 도움을 주기 위해,토토 커뮤니티/pgSQL추가 제공체크. 활성화되면 구성에 따라 다음 중 하나를 내보내는 데 사용할 수 있습니다.경고또는오류함수 컴파일 중. a를 받은 함수경고추가 메시지 생성 없이 실행할 수 있으므로 별도의 개발 환경에서 테스트하는 것이 좋습니다.

설정plpgsql.extra_warni토토 커뮤니티s, 또는토토 커뮤니티pgsql.extra_errors, 적절하게, ~에"모두"개발 및/또는 테스트 환경에서 권장됩니다.

이러한 추가 검사는 구성 변수를 통해 활성화됩니다.plpgsql.extra_warni토토 커뮤니티s경고 및토토 커뮤니티pgsql.extra_errors오류. 둘 다 쉼표로 구분된 검사 목록으로 설정할 수 있습니다."없음"또는"모두". 기본값은"없음". 현재 사용 가능한 검사 목록은 다음과 같습니다.

shadowed_variables

선언이 이전에 정의된 변수를 숨기는지 확인합니다.

엄격한_다중_할당

일부PL/PgSQL명령을 사용하면 한 번에 둘 이상의 변수에 값을 할당할 수 있습니다.선택. 일반적으로 대상 변수의 개수와 소스 변수의 개수는 일치해야 합니다.PL/PgSQL사용할 것입니다NULL누락된 값 및 추가 변수의 경우 무시됩니다. 이 확인을 활성화하면 다음과 같은 결과가 발생합니다.PL/PgSQL던지다경고또는오류타겟 변수의 개수와 소스 변수의 개수가 다를 때마다.

too_many_rows

이 확인을 활성화하면 다음이 발생합니다.PL/PgSQL주어진 쿼리가 다음과 같은 경우 둘 이상의 행을 반환하는지 확인합니다.INTO절이 사용되었습니다. 로서INTO문은 하나의 행만 사용합니다. 쿼리가 여러 행을 반환하도록 하는 것은 일반적으로 비효율적이거나 비결정적이므로 오류가 발생할 가능성이 높습니다.

다음 예는 다음의 효과를 보여줍니다.plpgsql.extra_warni토토 커뮤니티s다음으로 설정됨shadowed_variables:

plpgsql.extra_warni토토 커뮤니티s를 'shadowed_variables'로 설정;

함수 만들기 foo(f1 int)는 int를 $$로 반환합니다.
선언
f1 정수;
시작
f1을 반환합니다.
끝;
$$ 언어 plpgsql;
경고: 변수 "f1"은 이전에 정의된 변수를 숨깁니다.
라인 3: f1 int;
        ^
함수 생성

아래 예는 설정의 효과를 보여줍니다.plpgsql.extra_warni토토 커뮤니티sstrict_multi_designment:

plpgsql.extra_warni토토 커뮤니티s를 'strict_multi_location'으로 설정;

함수 생성 또는 교체 public.foo()
 반품 무효
 언어 plpgsql
AS $$
선언
  x 정수;
  y 정수;
시작
  x, y로 1 선택;
  x, y로 1, 2를 선택합니다.
  1, 2, 3 INTO x, y를 선택합니다.
끝;
$$;

선택 foo();
경고: 할당의 소스 및 대상 필드 수가 일치하지 않습니다.
세부사항: extra_warnings의 strict_multi_location 확인이 활성화되었습니다.
힌트: 쿼리가 정확한 열 목록을 반환하는지 확인하세요.
경고: 할당의 소스 및 대상 필드 수가 일치하지 않습니다.
세부사항: extra_warnings의 strict_multi_location 확인이 활성화되었습니다.
힌트: 쿼리가 정확한 열 목록을 반환하는지 확인하세요.

 푸 
-----

(1행)

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.