43.12. 개발을위한 팁토토 꽁 머니/pgsql #

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

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

실행 중PSQL, 다음 기능 정의 파일을로드하거나 다시로드 할 수 있습니다.

\ i filename.sql

그런 다음 즉시 함수를 테스트하기 위해 SQL 명령을 발행합니다.

또 다른 좋은 방법에서토토 꽁 머니/pgsql는 절차 적 언어로 개발을 용이하게하는 GUI 데이터베이스 액세스 도구와 함께 있습니다. 그러한 도구의 한 예는입니다.pgadmin, 다른 것이 존재하지만. 이 도구는 종종 단일 따옴표를 피하고 기능을보다 쉽게 재현하고 디버그하는 것과 같은 편리한 기능을 제공합니다.

43.12.1. 견적 마크 처리#

A의 코드토토 꽁 머니/pgsql함수는에 지정되어 있습니다.함수 만들기문자열 문자로서. 주변의 단일 따옴표로 평범한 방식으로 문자열 문자를 쓰면 함수 본문 내부의 단일 인용문이 두 배가되어야합니다. 마찬가지로 모든 백 슬래시를 두 배로 늘려야합니다 (탈출 문자열 구문이 사용되었다고 가정). 두 배의 인용문은 가장 지루하고, 더 복잡한 경우에는 코드가 완전히 이해할 수 없게 될 수 있습니다. 왜냐하면 6 개 이상의 인접한 견적 마크가 필요한 것을 쉽게 찾을 수 있기 때문입니다. 대신 기능 본문을 A로 작성하는 것이 좋습니다.Dollar-Quoted문자열 리터럴 (참조섹션 4.1.2.4). 달러 인용 접근 방식에서는 견적 표시를 두 배로 늘리지 않고 필요한 각 레벨의 중첩에 대해 다른 달러를 선보이는 구분기를 선택하도록주의하십시오. 예를 들어,를 쓸 수 있습니다.기능 만들기명령 AS :

함수 testfunc (정수) 생성 또는 교체 (정수) 정수를 $ proc $로 반환합니다
          .... ....
$ proc $ 언어 토토 꽁 머니pgsql;

이 내에서 SQL 명령 및의 간단한 문자 그대로 인용 표시를 사용할 수 있습니다.$$문자열로 조립하는 SQL 명령의 조각을 구분합니다. 포함 된 텍스트를 인용 해야하는 경우$$, 당신은 사용할 수 있습니다$ Q $등.

다음 차트는 달러 인용없이 견적 표시를 쓸 때해야 할 일을 보여줍니다. 사전 계층 인용 코드를 더 이해하기 쉬운 것으로 번역 할 때 유용 할 수 있습니다.

1 인용 표시 #

함수 본문을 시작하고 끝내려면 :

함수 만들기 foo ()는 정수를 반환합니다.
          .... ....
'언어 plpgsql;

단일 크기의 기능 본문 내 어디에서나, 인용 표시필수쌍으로 나타납니다.

2 인용 표시 #

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

a_output : = ''blah '';
f_name = ''foobar ''; 사용자 중에서 *를 선택하십시오.

달러 크기의 접근 방식에서는 다음과 같이 씁니다.

a_output : = 'blah';
f_name = 'foobar'; 사용자 중에서 *를 선택하십시오.

정확히토토 꽁 머니/pgsqlParser는 어느 경우에도 볼 수 있습니다.

4 인용 표시 #

함수 본문 내부의 문자열 상수에 단일 따옴표가 필요할 때 :

a_output : = a_output || ``그리고``foobar '' ''and xyz ''와 같은 이름.

실제로 값이 추가되었습니다a_output그리고 'foobar'및 xyz와 같은 이름.

달러 크기의 접근 방식에서는 다음과 같이 씁니다.

a_output : = a_output || $$ 및 'foobar'및 xyz $$와 같은 이름

이 주변의 달러 쿼트 구분자를 조심하는 것은 단지 아닙니다$$.

6 인용 표시 #

함수 내부의 문자열의 단일 따옴표 마크가 해당 문자열의 끝에 인접 해있을 때 :.

a_output : = a_output || ``그리고``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
    || '' '' '';; 끝 If; '';

a_output그런 다음 :

v _... kake ''... ''``````... ''; 끝 If;

달러 크기의 접근 방식에서 이것은 다음과 같습니다.

a_output : = a_output || V _ $$ || 인 경우 $$ referrer_keys.kind || $$와 같은 '$$
    || referrer_keys.key_string || $$ '
    그런 다음 '$$ ||를 반환하십시오 referrer_keys.referrer_type
    || $$ '; 끝 If; $$;

우리가 단일 견적 자국을 넣을 필요가 있다고 가정합니다a_output, 사용하기 전에 재확인되기 때문에.

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

피해를 입히기 전에 단순하지만 일반적인 문제의 사례를 찾는 데 도움이됩니다.토토 꽁 머니/pgsql추가 제공checks. 구성에 따라 활성화되면 A를 방출하는 데 사용할 수 있습니다.경고또는 an오류함수 컴파일 중. A를받은 함수경고추가 메시지를 생성하지 않고 실행할 수 있으므로 별도의 개발 환경에서 테스트하는 것이 좋습니다.

설정토토 꽁 머니pgsql.extra_warnings, 또는토토 꽁 머니pgsql.extra_errors, 적절하게"All"개발 및/또는 테스트 환경에서 장려됩니다.

이 추가 점검은 구성 변수를 통해 활성화됩니다토토 꽁 머니pgsql.extra_warnings경고 및토토 꽁 머니pgsql.extra_errors오류. 둘 다 쉼표로 구분 된 수표 목록으로 설정할 수 있습니다."없음"또는"All". 기본값은"없음". 현재 사용 가능한 수표 목록에는 다음이 포함됩니다.

Shadowed_variables #

선언이 이전에 정의 된 변수를 어둡게하는지 확인합니다.

strict_multi_assignment #

일부토토 꽁 머니/pgsql명령은 한 번에 하나 이상의 변수에 값을 할당 할 수 있습니다.선택. 일반적으로 대상 변수 수와 소스 변수 수는 일치해야합니다.토토 꽁 머니/pgsql사용NULL결 측값 및 추가 변수는 무시됩니다. 이 수표를 활성화하면토토 꽁 머니/pgsqla경고또는오류대상 변수 수와 소스 변수 수가 다를 때마다.

TOO_MANY_ROWS #

이 점검을 활성화하면토토 꽁 머니/pgsql주어진 쿼리가 두 번 이상 행을 반환하는지 확인하려면in조항이 사용됩니다. 로intoStatement는 한 행만 사용합니다. 쿼리 리턴은 일반적으로 비효율적이고/또는 비 결정적이므로 오류 일 가능성이 높습니다..

다음 예는의 효과를 보여줍니다.토토 꽁 머니pgsql.extra_warnings설정Shadowed_variables:

토토 꽁 머니pgsql.extra_warnings를 'Shadowed_variables'로 설정합니다.

function foo (f1 int) int를 $$로 반환합니다
선언하다
f1 int;
시작하다
반환 f1;
끝;
$$ 언어 plpgsql;
경고 : 변수 "f1"그림자 이전에 정의 된 변수입니다
3 행 : F1 int;
        ^
기능 만들기

아래 예제는 설정의 효과를 보여줍니다토토 꽁 머니pgsql.extra_warningstostrict_multi_assignment:

토토 꽁 머니pgsql.extra_warnings를 'strict_multi_assignment'로 설정합니다.

function public.foo () 생성 또는 교체
 void를 반환합니다
 언어 plpgsql
$$로
선언하다
  x int;
  y int;
시작하다
  1을 x, y로 선택하십시오.
  1, 2를 x, y로 선택하십시오.
  1, 2, 3을 x, y로 선택하십시오.
끝;
$$;

foo ()를 선택하십시오.
경고 : 과제의 소스 수와 대상 필드가 일치하지 않습니다.
세부 사항 : extra_warnings의 strict_multi_assignment 검사가 활성화되어 있습니다.
힌트 : 쿼리가 정확한 열 목록을 반환하는지 확인하십시오.
경고 : 과제의 소스 수와 대상 필드가 일치하지 않습니다.
세부 사항 : extra_warnings의 strict_multi_assignment 검사가 활성화되어 있습니다.
힌트 : 쿼리가 정확한 열 목록을 반환하는지 확인하십시오.

 foo
-----

(1 행)

정정 제출

문서에 올바른 것이 없다면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면