개발하는 좋은 방법 중 하나토토 베이/pgsql선택한 텍스트 편집기를 사용하여 기능을 작성하고 다른 창에서PSQL해당 기능을로드하고 테스트합니다. 이런 식으로하고 있다면를 사용하여 함수를 작성하는 것이 좋습니다.함수 생성 또는 교체
. 이렇게하면 파일을 다시로드하여 기능 정의를 업데이트 할 수 있습니다. 예를 들어:
함수 testfunc (정수)를 작성하거나 교체하십시오. 정수를 $$로 반환합니다 .... .... $$ 언어 토토 베이pgsql;
실행 중PSQL, 다음 기능 정의 파일을 다음과 같이로드하거나 다시로드 할 수 있습니다.
\ i filename.sql
그런 다음 즉시 함수를 테스트하기 위해 SQL 명령을 발행합니다.
또 다른 좋은 방법에서토토 베이/pgsql는 절차 적 언어의 개발을 용이하게하는 GUI 데이터베이스 액세스 도구가 있습니다. 그러한 도구의 한 예는입니다.pgadmin, 다른 것이 있지만. 이 도구는 종종 단일 따옴표를 피하고 기능을보다 쉽게 재현하고 디버그하는 것과 같은 편리한 기능을 제공합니다.
A의 코드토토 베이/pgsql함수는에 지정되어 있습니다.함수 만들기
문자열 문자로서. 주변의 단일 따옴표로 평범한 방식으로 문자열 문자를 쓰면 함수 본문 내부의 단일 인용문이 두 배가되어야합니다. 마찬가지로 모든 백 슬래시를 두 배로 늘려야합니다 (탈출 문자열 구문이 사용되었다고 가정). 두 배의 인용문은 가장 지루하고, 더 복잡한 경우에는 코드가 완전히 이해할 수 없게 될 수 있습니다. 왜냐하면 6 개 이상의 인접한 견적 마크가 필요한 것을 쉽게 찾을 수 있기 때문입니다. 대신 기능 본문을 A로 작성하는 것이 좋습니다.“Dollar-Quoted”문자열 리터럴 (참조섹션 4.1.2.4). 달러 인용 접근 방식에서는 견적 표시를 두 배로 늘리지 않고 필요한 각 레벨의 중첩에 대해 다른 달러를 선보이는 구분기를 선택하도록주의하십시오. 예를 들어,를 쓸 수 있습니다.기능 만들기
명령 AS :
함수 testfunc (정수)를 만들거나 교체하십시오. 정수를 $ proc $로 반환합니다 .... .... $ proc $ 언어 토토 베이pgsql;
이 내에서는 SQL 명령 및의 간단한 문자 그대로 인용 표시를 사용할 수 있습니다.$$
문자열로 조립하는 SQL 명령의 조각을 구분합니다. 포함 된 텍스트를 인용 해야하는 경우$$
, 사용할 수 있습니다$ Q $
등.
다음 차트는 달러 인용없이 견적 표시를 쓸 때해야 할 일을 보여줍니다. 사전 계층 인용 코드를 더 이해하기 쉬운 것으로 번역 할 때 유용 할 수 있습니다.
함수 본문을 시작하고 끝내려면 :
함수 만들기 foo ()는 정수를 반환합니다. .... .... '언어 plpgsql;
단일 인용 기능 본문 내의 어느 곳에서나 견적 표시필수쌍으로 나타납니다.
함수 본문 내부의 문자열 리터럴의 경우 :
a_output : = ''blah ''; f_name = ''foobar ''; 사용자 중에서 *를 선택하십시오.
달러 크기의 접근 방식에서는 다음과 같이 씁니다.
a_output : = 'blah'; f_name = 'foobar'; 사용자 중에서 *를 선택하십시오.
정확히토토 베이/pgsql파서는 어느 경우에도 볼 수 있습니다.
함수 본문 내부의 문자열 상수에 단일 따옴표가 필요할 때 :
a_output : = a_output || ``그리고``foobar '' ''and xyz ''와 같은 이름.
실제로 값이 추가되었습니다a_output
:그리고 'foobar'및 xyz와 같은 이름
.
달러 크기의 접근 방식에서는 다음과 같이 씁니다.
a_output : = a_output || $$ 및 'foobar'및 xyz $$와 같은 이름
이 주변의 모든 달러 쿼트 구분자를 조심하는 것은$$
.
함수 내부의 문자열의 단일 인용 표시가 해당 문자열의 끝에 인접 해있을 때 :.
a_output : = a_output || ``그리고``foobar '' '' ''과 같은 이름
값이 첨부a_output
그런 다음 :그리고 'foobar'와 같은 이름
.
달러 크기의 접근 방식에서 이것은 다음과 같습니다.
a_output : = a_output || $$ 및 'foobar'$$와 같은 이름
문자열 상수에서 두 개의 단일 따옴표 마크를 원할 때 (8 인용 자국을 차지함) 이것은 해당 문자열의 끝 상수 (2)에 인접 해 있습니다. 다른 기능을 생성하는 함수를 작성하는 경우에만 필요할 것입니다.예 41.10. 예를 들어:
a_output : = a_output || ''v_ ''|| referrer_keys.kind || '' 좋다 '''''''''' || referrer_keys.key_string || '' '' '' '' '' '' ' 그런 다음`` '' '' '||를 반환하십시오 referrer_keys.referrer_type || '' '' '';; 끝 If; '';
값a_output
그런 다음 :
if v _... kake ''... ''```` '...' '; 끝 If;
달러 크기의 접근 방식에서 이것은 다음과 같습니다.
a_output : = a_output || V _ $$ || 인 경우 $$ referrer_keys.kind || $$와 같은 '$$ || referrer_keys.key_string || $$ ' 그런 다음 '$$ ||를 반환하십시오 referrer_keys.referrer_type || $$ '; 끝 If; $$;
우리가 단일 견적 자국을 넣을 필요가 있다고 가정합니다a_output
, 사용하기 전에 재확인되기 때문에.
사용자가 해를 입히기 전에 단순하지만 일반적인 문제의 사례를 찾는 데 도움을주기 위해토토 베이/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명령은 한 번에 하나 이상의 변수에 값을 할당 할 수 있습니다.선택
. 일반적으로 대상 변수 수와 소스 변수 수는 일치해야합니다.PL/PGSQL사용NULL
결 측값 및 추가 변수는 무시됩니다. 이 수표를 활성화하면토토 베이/pgsql던지기경고
또는오류
대상 변수 수와 소스 변수 수가 다를 때마다
TOO_MANY_ROWS
#이 점검을 활성화하면토토 베이/pgsql주어진 쿼리가 2 회 이상의 행을 반환하는지 확인하려면into
절이 사용됩니다. 로in
Statement는 한 행만 사용합니다. 쿼리 리턴은 일반적으로 비효율적이고/또는 비 결정적이므로 오류 일 가능성이 높습니다..
다음 예는의 효과를 보여줍니다.토토 베이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_warnings
tostrict_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 행)
올바른 문서에 아무것도 표시되면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면