2012-06-28 44 views

回答

0

你可以在/ etc/crontab中直接調用psql。該呼叫將遵循以下模式:

psql -c 'DELETE FROM my_table WHERE ...' 

您需要爲'psql'提供適當的附加參數來創建數據庫連接。有關更多信息,請參閱documentation for psql

1

幾種很好的方法。
您可能想要做的不僅僅是一個DELETE。運行ANALYZE tbl?處理多個表?
我想包在AA PLPGSQL功能的工作:

CREATE OR REPLACE FUNCTION myschema.f_maintain() 
    RETURNS text AS 
$BODY$ 
DECLARE 
    _msg text := 'Report'; 
    _min_ts timestamp := now()::timestamp - interval '5y'; -- max. age 5 years 
    _count int; 
BEGIN 

DELETE FROM tbl 
WHERE my_ts < _min_ts 
AND <some condition>; 

GET DIAGNOSTICS _count = ROW_COUNT; 

IF _count > 0 THEN 
    _msg := _msg || E'\nDeleted rows in tbl: ' || _count; 
END IF; 

ANALYZE tbl; 

-- more ? 

RAISE LOG '%', _msg; 

END; 
$BODY$ 
    LANGUAGE plpgsql; 

...從殼這樣稱呼它:

psql -p 5432 event -c 'SELECT myschema.f_maintain()' 

日程安排系統用戶的Postgres cron作業:

crontab -e 

要在每天的02:06運行它,添加一行:

06 02 * * * psql -p 5432 event -c 'SELECT myschema.f_maintain()' >/dev/null 
3

在大多數情況下,我更喜歡帶有here-document的shell腳本。 (shell-variables在這裏很好地擴展了文檔):

#!/bin/sh 
PSQL=/local/postgres/bin/psql 
SOME_VALUE=123 

$PSQL my_database <<THE_END 
DELETE FROM my_table 
WHERE my_column <= $SOME_VALUE 
    ; 
THE_END