PostgreSQL 이 정시 임 무 를 수행 하 는 4 가지 방법 을 상세히 설명 합 니 다.

定时 任务
데이터베이스 정시 임 무 는 정기 적 인 백업,통계 정보 수집,데이터 집계,데이터 정리 와 최적화 등 을 실현 하 는 데 사용 할 수 있다.PostgreSQL 은 Oracle,MySQL,Microsoft SQL Sever 와 같은 내 장 된 작업 스케줄 링 기능 을 제공 하지 않 았 기 때문에 본 고 는 PostgreSQL 데이터베이스 에서 정시 작업 을 실현 하 는 4 가지 방법 을 소개 한다.
운영 체제 정시 작업
Linux 정시 작업(crontab)이나 Windows 작업 계획 프로그램(Task Scheduler)은 우리 에 게 정시 작업 을 실현 하 는 전통 적 인 방법 을 제공 합 니 다.crontab 의 경우 다음 명령 으로 작업 목록 을 편집 할 수 있 습 니 다.

crontab -e
그리고 열 린 파일 에 다음 형식 으로 데 이 터 를 추가 합 니 다.

#                       
#(0-59) (0-23) (1-31)  (1-12) (0-7 [7 or 0 == Sunday])
<minute> <hour> <day of month> <month> <day of week> <command>
그 중 앞의 다섯 필드 는 명령 을 실행 하 는 시간 을 표시 하고 별표(*)를 사용 하여 모든 시간 과 일치 할 수 있 습 니 다.예 를 들 어,를 별표 로 설정 하면 매달 명령 을 실행 하 는 것 을 표시 합 니 다.
예 를 들 어 다음 내용 을 입력 하면 매일 0 시 에 데이터베이스 논리 백업 작업 을 수행 하 는 것 을 나타 낸다.

0 0 * * * pg_dump --no-password -U user db_name > backup.sql
보안 을 위해 비밀 번 호 를 직접 입력 하지 말고 비밀 번 호 를.pgpass 파일 에 추가 하고 이 파일 의 권한 을 현재 사용자 만 볼 수 있 도록 설정 해 야 합 니 다.

chmod 600 .pgpass
pgAgent
pgAgent 는 PostgreSQL 데이터베이스 에 사용 되 는 작업 스케줄 링 에이전트 로 복잡 한 스케줄 링 계획 을 바탕 으로 여러 단계 의 일괄 처리,셸 스 크 립 트 와 SQL 명령 을 실행 할 수 있 습 니 다.유 닉 스/리 눅 스 시스템 에 대해 pgAgent 이후 데스크 톱 프로 세 스 가 실 행 됩 니 다.윈도 시스템 에 대해 pgAgent 는 서비스 로 실 행 됩 니 다.
pgAgent 설치
PgAdmin 4 관리 도 구 는 pgAgent 의 기능 을 통합 하 였 으 나 이 두 가 지 는 따로 설치 해 야 합 니 다.저 희 는 공식 홈 페이지 를 통 해다운로드 하 다.PgAdmin 4 와 pgAgent 를 통 해구체 적 인 설치 절차 와 주의사항 은 참고 할 수 있다홈 페이지 문서설치 가 완료 되면 PgAdmin 4 왼쪽 네 비게 이 션 트 리 에서'pgAgent Jobs'노드 를 볼 수 있 습 니 다.
pgagent
정시 작업 생 성
오른쪽 단 추 를 누 르 고"pgAgent Jobs"노드 를 클릭 하고"Create">"pgAgent Job"을 선택 하여 새로운 정시 작업 을 만 듭 니 다.
job
이 가운데'Genel'페이지 는 작업 의 이름 을 포함 한 기본 정 보 를 입력 할 수 있다.'Steps"페이지 는 실 행 된 스 크 립 트 나 SQL 문장 등 여러 작업 절 차 를 설정 할 수 있 습 니 다."Schedules"페이지 는 작업 수행 시간 계획 을 정의 하 는 데 사 용 됩 니 다."SQL 페이지 는 작업 을 만 들 거나 수정 하 는 문 구 를 표시 할 수 있 습 니 다.
sql
"Save"단 추 를 누 르 면 설정 을 저장 하고 작업 을 만 듭 니 다.그리고"pgAgent Job"노드 에서 만 든 작업 을 볼 수 있 습 니 다.
pg_cron
4pg_croncitusdata 회사 가 개발 한 PostgreSQL 정시 작업 플러그 인(Oracle 의 DBMS 와 유사 합 니 다.SCHEDULER)。pg_cron 은 배경 작업 프로 세 스 로 실 행 됩 니 다.cron 과 같은 편집 문법 을 사용 하여 데이터베이스 에서 정시 작업 을 직접 수행 할 수 있 습 니 다.예 를 들 면:

--     3:30am (GMT)       
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
 schedule
----------
 42

--    10:00am (GMT)       
SELECT cron.schedule('nightly-vacuum', '0 10 * * *', 'VACUUM');
 schedule
----------
 43

--          3:00am (GMT)
SELECT cron.schedule('nightly-vacuum', '0 3 * * *', 'VACUUM');
 schedule
----------
 43

--         
SELECT cron.unschedule('nightly-vacuum' );
 unschedule 
------------
 t
(1 row)

SELECT cron.unschedule(42);
 unschedule
------------
  t
설치 pgcron
pg_cron 은 현재 Linux 운영 체제 만 지원 합 니 다.Red Hat,CentOS,Fedora 등 운영 체제 에 대해 다음 명령 을 사용 하여 설치 할 수 있 습 니 다(PostgreSQL 12).

sudo yum install -y pg_cron_12
데 비 안과 우 분투 에 대해 서 는 다음 명령 을 사용 하여 설치 할 수 있 습 니 다(PostgreSQL 12).

sudo apt-get -y install postgresql-12-cron
또한,우 리 는 원본 코드 를 사용 하여 컴 파일 설치 할 수 있 습 니 다.

git clone https://github.com/citusdata/pg_cron.git
cd pg_cron
# Ensure pg_config is in your path, e.g.
export PATH=/usr/pgsql-12/bin:$PATH
make && sudo PATH=$PATH make install
pg 설정cron
PostgreSQL 을 시작 할 때 pg 를 실행 하기 위해cron 배경 작업 프로 세 스,pgcron postgresql.conf 파일 에 추 가 된 sharedpreload_libraries 설정 항목 입 니 다.기본 상황 에서 pgcron 배경 프로 세 스 는 postgres 데이터 베 이 스 를 사용 하여 필요 한 메타 데 이 터 를 가 져 옵 니 다.하지만 우리 도 cron.database 를 사용 할 수 있 습 니 다.name 설정 매개 변 수 를 설정 합 니 다.

shared_preload_libraries = 'pg_cron'
cron.database_name = 'postgres'
PostgreSQL 다시 시작:

sudo service postgresql-12 restart
그리고 우 리 는 아래 명령 을 사용 하여 pg 를 만 들 수 있 습 니 다.cron 함수 및 메타 데이터 관련 표:

--    superuser       
CREATE EXTENSION pg_cron;

--     ,           
GRANT USAGE ON SCHEMA cron TO username;
pg_timetable
CYBERTEC 사가 개발 한 PostgreSQL 작업 스케줄 러 로 유연 한 설정 방식 과 많은 고급 기능 을 제공 합 니 다.여러 작업 으로 구 성 된 작업 체인,SQL 명령 과 실행 가능 한 프로그램 지원,내 장 된 작업(예 를 들 어 메 일 발송),데이터베이스 기반 설정 과 로그 기능,cron 스타일 의 계획 스케줄 링,동시 실행 보호 등 을 포함한다.
pg_timetable
설치 pgtimetable
우선,우 리 는 공식 적 으로 발표 한 바 이 너 리 설 치 를 사용 할 수 있 습 니 다pg_timetable현재 윈도,리 눅 스,맥 OS 운영 체 제 를 지원 합 니 다.
또한,공식 docker 미 러 는프로그램 설치 pgtimetable
master 분기 의 latest 탭 은 최신 버 전 입 니 다.명령 행 의 실행 방식 은 다음 과 같 습 니 다.

docker run --rm \
 cybertecpostgresql/pg_timetable:latest \
 -h 10.0.0.3 -p 54321 -c worker001
환경 변 수 를 지정 하 는 방법 은 다음 과 같 습 니 다.

docker run --rm \
 -e PGTT_PGHOST=10.0.0.3 \
 -e PGTT_PGPORT=54321 \
 cybertecpostgresql/pg_timetable:latest \
 -c worker001
그 밖 에 우 리 는 소스 코드 를 사용 하여 컴 파일 하여 설치 할 수 있다.먼저 Go 언어 환경 을 다운로드 하고 설치 한 다음 go get 명령 으로 pg 복사timetable 소스 코드:

$ env GIT_TERMINAL_PROMPT=1 go get github.com/cybertec-postgresql/pg_timetable/
Username for 'https://github.com': <Github Username>
Password for 'https://[email protected]': <Github Password>
pg 실행timetable:

$ cd ~/go/src/github.com/cybertec-postgresql/pg_timetable/
$ go run main.go --dbname=dbname --clientname=worker001 --user=scheduler --password=strongpwd
또는 바 이 너 리 프로그램 으로 컴 파일 하여 실행 할 수도 있 습 니 다.

$ go build
$ ./pg_timetable --dbname=dbname --clientname=worker001 --user=scheduler --password=strongpwd
프로젝트 의 모든 테스트 를 실행 하려 면 다음 명령 을 실행 할 수 있 습 니 다.

$ cd ~/go/src/github.com/cybertec-postgresql/pg_timetable/
$ go get github.com/stretchr/testify/
$ go test ./...
postgres docker 미 러 를 사용 하여 테스트 를 실행 할 수 있 습 니 다:

$ RUN_DOCKER=true go test ./...
pg 사용timetable
pg_timetable 은 PostgreSQL 서버 에서 독립 적 으로 실행 되 며 클 라 이언 트 프로 세 스 에 해당 합 니 다.설치 완료 후 다음 명령 을 실행 하여 pgtimetable 프로그램:

# ./pg_timetable

Application Options:
 -c, --clientname=  Unique name for application instance
 -v, --verbose   Show verbose debug information [$PGTT_VERBOSE]
 -h, --host=   PG config DB host (default: localhost) [$PGTT_PGHOST]
 -p, --port=   PG config DB port (default: 5432) [$PGTT_PGPORT]
 -d, --dbname=   PG config DB dbname (default: timetable) [$PGTT_PGDATABASE]
 -u, --user=   PG config DB user (default: scheduler) [$PGTT_PGUSER]
 -f, --file=   SQL script file to execute during startup
 --password=   PG config DB password (default: somestrong) [$PGTT_PGPASSWORD]
 --sslmode=[disable|require] What SSL priority use for connection (default: disable)
 --pgurl=   PG config DB url [$PGTT_URL]
 --init   Initialize database schema and exit. Can be used with --upgrade
 --upgrade   Upgrade database to the latest version
 --no-program-tasks  Disable executing of PROGRAM tasks [$PGTT_NOPROGRAMTASKS]
소스 코드 의다운로드디 렉 터 리 에 대량의 예 시 를 제공 하여 참고 할 수 있 습 니 다.다음 명령 은 8 월 00:05 에"MyJob"을 실행 하 는 정시 작업 을 만 들 수 있 습 니 다.

SELECT timetable.job_add('MyJob', 'SELECT public.my_func()' , NULL, 'SQL', '5 0 * 8 *', live := TRUE);
다음 명령 은 0 시 부터 20 시 까지 두 시간 23 분 마다"MyJob"작업 을 실행 합 니 다.

SELECT timetable.job_add('MyJob', 'SELECT public.my_func()' , NULL, 'SQL', '23 0-20/2 * * *', live := TRUE);
pg_timetable 계획 작업 의 전체 설정 은 3 단계 로 구성 되 어 있 습 니 다.
  • 첫 번 째 단 계 는 base 설정 에 사용task,실행 할 동작 을 정의 합 니 다.SQL 구문,외부 프로그램 및 내 장 된 작업 을 포함 합 니 다
  • 두 번 째 단 계 는 task 설정 에 사용chain,한 그룹의 순서 로 실행 되 는 기본 작업 을 정의 합 니 다
  • 3 단 계 는 chain 설정 에 사용execution_config,작업 체인 의 실행 계획 을 정의 합 니 다
  • chain
    그 밖 에 기본 임무 에 제어 파 라 메 터 를 전달 하기 위해 임무 체인 의 임 무 는 모두 실행 파 라 메 터 를 추가 할 수 있다.상세 한 배치 방법 과 사례 는 공식 사 이 트 를 참고 할 수 있다.
    총결산
    본 고 는 PostgreSQL 데이터베이스 에서 정시 임 무 를 실현 하 는 4 가지 방법 을 소개 했다.이 는 운영 체제 의 정시 임무,pgAgent 대리,pg 를 포함한다.cron 플러그 인 및 pgtimetable 도구.
    PostgreSQL 이 정시 임 무 를 수행 하 는 네 가지 방법 에 관 한 글 은 여기까지 입 니 다.더 많은 PostgreSQL 정시 임무 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기