PostgreSQL에서 임시 함수를 만드는 방법은 무엇입니까?
데이터베이스에서 루프를 실행해야 합니다.이것은 단 한 번의 요구 사항입니다.기능을 실행한 후 지금 기능을 삭제합니다.
임시/일회용 기능을 만드는 데 좋은 방법이 있습니까?
저는 제가 쓰고 있는 스크립트에서 많은 시간을 사용하는 방법을 알아야 했습니다.pg_temp 스키마를 사용하여 임시 함수를 만들 수 있습니다.이 스키마는 필요에 따라 연결을 위해 생성되며 임시 테이블이 저장되는 스키마입니다.연결이 닫히거나 만료되면 이 스키마는 삭제됩니다.이 스키마에 함수를 만들면 스키마가 자동으로 만들어집니다.그러므로,
create function pg_temp.testfunc() returns text as
$$ select 'hello'::text $$ language sql;
연결이 유지되는 한 계속 유지될 수 있는 기능입니다.드롭 명령을 호출할 필요가 없습니다.
@crowmagnumb의 대답에서 현명한 속임수에 대한 몇 가지 추가 메모:
CREATE FUNCTION pg_temp.f_inc(int)
RETURNS int AS 'SELECT $1 + 1' LANGUAGE sql IMMUTABLE;
SELECT pg_temp.f_inc(42);
f_inc
-----
43
임시 스키마에 작성된 함수는 동일한 세션 내에서만 볼 수 있습니다(임시 스키마와 동일).다른 모든 세션에서는 보이지 않습니다(같은 역할이라도).다음 시간 후 동일한 세션에서 다른 역할로 기능에 액세스할 수 있습니다.
SET ROLE
.이 "temp" 함수를 기반으로 기능 인덱스를 만들 수도 있습니다.
CREATE INDEX foo_idx ON tbl (pg_temp.f_inc(id));
따라서 비임시 테이블의 임시 함수를 사용하여 일반 인덱스를 만듭니다.이러한 인덱스는 모든 세션에서 볼 수 있지만 생성 세션에서만 유효합니다.쿼리 플래너는 함수 인덱스를 사용하지 않으며, 함수 인덱스에서는 식을 반복하지 않습니다.여전히 약간의 더러운 속임수.세션이 닫히면 종속 개체로 자동으로 삭제됩니다.이런 일은 절대로 허용되어서는 안 된다고 생각합니다...
함수를 반복적으로 실행하기만 하면 되고 SQL만 실행하면 되는 경우에는 준비된 문을 고려하십시오.이것은 세션이 끝날 때 종료되는 임시 SQL 함수와 매우 유사합니다.하지만 동일한 것은 아니며, 오직 혼자서만 사용할 수 있습니다.EXECUTE
다른 쿼리 내에 중첩되지 않았습니다.예:
PREPARE upd_tbl AS
UPDATE tbl t SET set_name = $2 WHERE tbl_id = $1;
통화:
EXECUTE upd_tbl(123, 'foo_name');
세부사항:
버전 9.0을 사용하는 경우 새 DO 문으로 이 작업을 수행할 수 있습니다.
http://www.postgresql.org/docs/current/static/sql-do.html
이전 버전에서는 함수를 만들고 호출한 다음 다시 삭제해야 합니다.
도킹 절차의 경우 커서가 그리 나쁘지 않습니다.하지만 그것들은 제품을 사용하기에는 너무 비효율적입니다.
그들은 당신이 db의 sql 결과를 쉽게 반복할 수 있게 해줄 것입니다.
언급URL : https://stackoverflow.com/questions/4990622/how-to-create-a-temporary-function-in-postgresql
'programing' 카테고리의 다른 글
Git에서 HEAD는 무엇입니까? (0) | 2023.05.06 |
---|---|
범위에서 이름을 반환하려면 어떻게 해야 합니까? (0) | 2023.05.06 |
어떻게 하면 ASP에서 더 많은 권한을 가질 수 있습니까?NET? (0) | 2023.05.06 |
postgres 데이터베이스에서 단일 테이블의 백업을 만드는 방법은 무엇입니까? (0) | 2023.05.06 |
R의 빈 벡터에 값을 추가하시겠습니까? (0) | 2023.05.06 |