| ÐокÑменÑаÑÐ¸Ñ Ð¿Ð¾ PostgreSQL 9.4.1 | |||
|---|---|---|---|
| ÐÑед. | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | Ðлава 9. ФÑнкÑии и опеÑаÑоÑÑ | След. |
9.26. ФÑнкÑии Ð´Ð»Ñ ÑиÑÑемного админиÑÑÑиÑованиÑ
ФÑнкÑии, опиÑаннÑе в ÑÑом Ñазделе, пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑÐ¾Ð»Ñ Ð¸ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑвеÑом PostgreSQL.
9.26.1. ФÑнкÑии Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑигÑÑаÑией
РТаблиÑе 9-63 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ ÑÑнкÑии, позволÑÑÑие полÑÑиÑÑ Ð¸ измениÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов конÑигÑÑаÑии вÑполнениÑ.
ТаблиÑа 9-63. ФÑнкÑии Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑигÑÑаÑией
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
current_setting(setting_name) | text | полÑÑÐ°ÐµÑ ÑекÑÑее знаÑение паÑамеÑÑа |
set_config(setting_name, new_value, is_local) | text | ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð½Ð¾Ð²Ð¾Ðµ знаÑение паÑамеÑÑа и возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾ |
ФÑнкÑÐ¸Ñ current_setting вÑдаÑÑ ÑекÑÑее знаÑение паÑамеÑÑа setting_name. Ðна ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑной SQL-команде SHOW. ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ:
SELECT current_setting('datestyle');
current_setting
-----------------
ISO, MDY
(1 row)set_config ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа setting_name знаÑение new_value. ÐÑли паÑамеÑÑ is_local Ñавен true, новое знаÑение бÑÐ´ÐµÑ Ð´ÐµÐ¹ÑÑвоваÑÑ ÑолÑко в ÑамкаÑ
ÑекÑÑей ÑÑанзакÑии. ЧÑÐ¾Ð±Ñ ÑÑо знаÑение дейÑÑвовало на пÑоÑÑжении ÑекÑÑего ÑеанÑа, ÐµÐ¼Ñ Ð½Ñжно пÑиÑвоиÑÑ false. ÐÑа ÑÑнкÑÐ¸Ñ ÑооÑвеÑÑÑвÑÐµÑ SQL-команде SET. ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ:
SELECT set_config('log_statement_stats', 'off', false);
set_config
------------
off
(1 row)9.26.2. ФÑнкÑии Ð´Ð»Ñ Ð¿ÐµÑедаÑи Ñигналов ÑеÑвеÑÑ
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9-64, позволÑÑÑ Ð¿ÐµÑедаваÑÑ ÑпÑавлÑÑÑие ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ð´ÑÑгим ÑеÑвеÑнÑм пÑоÑеÑÑам. ÐÑзÑваÑÑ ÑÑи ÑÑнкÑии обÑÑно могÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели, кÑоме Ñвно оÑмеÑеннÑÑ Ð¸ÑклÑÑений.
ТаблиÑа 9-64. ФÑнкÑии Ð´Ð»Ñ Ð¿ÐµÑедаÑи Ñигналов ÑеÑвеÑÑ
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_cancel_backend(pid int) | boolean | ÐÑменÑÐµÑ ÑекÑÑий запÑÐ¾Ñ ÑеÑвеÑного пÑоÑеÑÑа. ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ вÑполниÑÑ Ð´Ð»Ñ Ð´ÑÑгого ÑеÑвеÑного пÑоÑеÑÑа, еÑли он пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ñой же Ñоли, ÑÑо и ÑекÑÑий полÑзоваÑелÑ. Ðо вÑÐµÑ Ð¾ÑÑалÑнÑÑ ÑлÑÑаÑÑ ÑÑебÑÑÑÑÑ Ð¿Ñава ÑÑпеÑполÑзоваÑелÑ. |
pg_reload_conf() | boolean | ÐаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑеÑвеÑнÑм пÑоÑеÑÑам пеÑегÑÑзиÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ |
pg_rotate_logfile() | boolean | ÐÑокÑÑÑÐ¸Ð²Ð°ÐµÑ Ð¶ÑÑнал ÑообÑений ÑеÑвеÑа |
pg_terminate_backend(pid int) | boolean | ÐавеÑÑÐ°ÐµÑ ÑеÑвеÑнÑй пÑоÑеÑÑ. ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ вÑполниÑÑ Ð´Ð»Ñ Ð´ÑÑгого ÑеÑвеÑного пÑоÑеÑÑа, еÑли он пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ñой же Ñоли, ÑÑо и ÑекÑÑий полÑзоваÑелÑ. Ðо вÑÐµÑ Ð¾ÑÑалÑнÑÑ ÑлÑÑаÑÑ ÑÑебÑÑÑÑÑ Ð¿Ñава ÑÑпеÑполÑзоваÑелÑ. |
ÐÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· ÑÑÐ¸Ñ ÑÑнкÑий возвÑаÑÐ°ÐµÑ true пÑи ÑÑпеÑном завеÑÑении и false в пÑоÑивном ÑлÑÑае.
pg_cancel_backend и pg_terminate_backend пеÑедаÑÑ ÑÐ¸Ð³Ð½Ð°Ð»Ñ (SIGINT и SIGTERM, ÑооÑвеÑÑÑвенно) ÑеÑвеÑÐ½Ð¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм кодом PID. Ðод акÑивного пÑоÑеÑÑа можно полÑÑиÑÑ Ð¸Ð· колонки pid пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_stat_activity или пÑоÑмоÑÑев на ÑеÑвеÑе пÑоÑеÑÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ postgres (иÑполÑзÑÑ ps в Unix или ÐиÑпеÑÑÐµÑ Ð·Ð°Ð´Ð°Ñ Ð² Windows). Ð Ð¾Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð°ÐºÑивного пÑоÑеÑÑа можно ÑзнаÑÑ Ð² колонке usename пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_stat_activity.
pg_reload_conf оÑпÑавлÑÐµÑ Ñигнал SIGHUP Ð³Ð»Ð°Ð²Ð½Ð¾Ð¼Ñ ÑеÑвеÑÐ½Ð¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ, коÑоÑÑй командÑÐµÑ Ð²Ñем подÑинÑннÑм пÑоÑеÑÑам пеÑезагÑÑзиÑÑ ÑÐ°Ð¹Ð»Ñ ÐºÐ¾Ð½ÑигÑÑаÑии.
pg_rotate_logfile ÑказÑÐ²Ð°ÐµÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑÑ Ð¶ÑÑнала ÑообÑений немедленно пеÑеклÑÑиÑÑÑÑ Ð½Ð° новÑй Ñайл. ÐÑо Ð¸Ð¼ÐµÐµÑ ÑмÑÑл, ÑолÑко когда ÑабоÑÐ°ÐµÑ Ð²ÑÑÑоеннÑй ÑбоÑÑик ÑообÑений, Ñак как без него подпÑоÑеÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа жÑÑнала не запÑÑкаеÑÑÑ.
9.26.3. ФÑнкÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑезеÑвнÑм копиÑованием
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9-65, пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ «Ð½Ð° Ñ
одѻ. ÐÑи ÑÑнкÑии нелÑÐ·Ñ Ð²ÑполнÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ (за иÑклÑÑением pg_is_in_backup, pg_backup_start_time и pg_xlog_location_diff).
ТаблиÑа 9-65. ФÑнкÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑезеÑвнÑм копиÑованием
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_create_restore_point(name text) | pg_lsn | СоздаÑÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½ÑÑ ÑоÑÐºÑ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ (ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм) |
pg_current_xlog_insert_location() | pg_lsn | ÐолÑÑÐ°ÐµÑ ÑекÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² жÑÑнале ÑÑанзакÑий |
pg_current_xlog_location() | pg_lsn | ÐолÑÑÐ°ÐµÑ ÑекÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð·Ð°Ð¿Ð¸Ñи в жÑÑнале ÑÑанзакÑий |
pg_start_backup(label text [, fast boolean]) | pg_lsn | ÐодгоÑÐ°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÑеÑÐ²ÐµÑ Ðº ÑезеÑÐ²Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ «Ð½Ð° Ñ Ð¾Ð´Ñ» (ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм и ÑолÑм ÑепликаÑии) |
pg_stop_backup() | pg_lsn | СообÑÐ°ÐµÑ Ð¾Ð± оконÑании ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм и ÑолÑм ÑепликаÑии) |
pg_is_in_backup() | bool | ÐозвÑаÑÐ°ÐµÑ true в пÑоÑеÑÑе иÑклÑÑиÑелÑного ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ |
pg_backup_start_time() | timestamp with time zone | ÐолÑÑÐ°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð·Ð°Ð¿ÑÑка вÑполнÑÑÑегоÑÑ Ð¸ÑклÑÑиÑелÑного ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ |
pg_switch_xlog() | pg_lsn | ÐниÑииÑÑÐµÑ Ð¿ÐµÑеклÑÑение на новÑй Ñайл жÑÑнала ÑÑанзакÑий (ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм) |
pg_xlogfile_name(location pg_lsn) | text | ÐолÑÑÐ°ÐµÑ Ð¸Ð· ÑÑÑоки позиÑии в жÑÑнале ÑÑанзакÑии Ð¸Ð¼Ñ ÑооÑвеÑÑÑвÑÑÑего Ñайла |
pg_xlogfile_name_offset(location pg_lsn) | text, integer | ÐолÑÑÐ°ÐµÑ Ð¸Ð· ÑÑÑоки позиÑии в жÑÑнале ÑÑанзакÑии Ð¸Ð¼Ñ ÑооÑвеÑÑÑвÑÑÑего Ñайла и деÑÑÑиÑное ÑмеÑение в нÑм |
pg_xlog_location_diff(location pg_lsn, location pg_lsn) | numeric | ÐÑÑиÑлÑÐµÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð¿Ð¾Ð·Ð¸ÑиÑми в жÑÑнале ÑÑанзакÑий |
pg_start_backup пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿ÑоизволÑнÑÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ Ð¿Ð¾Ð»ÑзоваÑелем меÑÐºÑ ÑезеÑвной копии. (ÐбÑÑно ÑÑо Ð¸Ð¼Ñ Ñайла, в коÑоÑом бÑÐ´ÐµÑ ÑоÑ
Ñанена ÑезеÑÐ²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ.) ÐÑа ÑÑнкÑÐ¸Ñ Ð·Ð°Ð¿Ð¸ÑÑÐ²Ð°ÐµÑ Ñайл меÑки (backup_label) в каÑалог даннÑÑ
ÑеÑвеÑа, вÑполнÑÐµÑ Ð¿ÑоÑедÑÑÑ ÐºÐ¾Ð½ÑÑолÑной ÑоÑки, а заÑем возвÑаÑÐ°ÐµÑ Ð² ÑекÑÑовом виде наÑалÑнÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð² жÑÑнале ÑÑанзакÑий Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑезеÑвной копии. РезÑлÑÑÐ°Ñ ÑÑой ÑÑнкÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½, но еÑли он не нÑжен, его можно пÑоÑÑо игноÑиÑоваÑÑ.
postgres=# select pg_start_backup('label_goes_here');
pg_start_backup
-----------------
0/D4445B8
(1 row) У ÑÑой ÑÑнкÑии еÑÑÑ Ñакже вÑоÑой необÑзаÑелÑнÑй, паÑамеÑÑ Ñипа boolean. ÐÑли он Ñавен true, pg_start_backup наÑнÑÑ ÑабоÑÑ Ð¼Ð°ÐºÑималÑно бÑÑÑÑо. ÐÑи ÑÑом бÑÐ´ÐµÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ вÑполнена пÑоÑедÑÑа конÑÑолÑной ÑоÑки, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð²Ð»ÐµÑÑ Ð¼Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑий ввода/вÑвода и заÑоÑмозиÑÑ Ð¿Ð°ÑаллелÑнÑе запÑоÑÑ.
pg_stop_backup ÑдалÑÐµÑ Ñайл меÑки, ÑозданнÑй ÑÑнкÑией pg_start_backup, и ÑоздаÑÑ Ñайл иÑÑоÑии ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² аÑÑ
ивной облаÑÑи жÑÑнала ÑÑанзакÑий. Ð ÑÑом Ñайле Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑезеÑвной копии ÑоÑ
ÑанÑеÑÑÑ Ð¼ÐµÑка, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ñи вÑзове pg_start_backup, наÑалÑÐ½Ð°Ñ Ð¸ конеÑÐ½Ð°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð² жÑÑнале ÑÑанзакÑий, а Ñакже вÑÐµÐ¼Ñ Ð½Ð°Ñала и оконÑаниÑ. ÐозвÑаÑÐ°ÐµÑ Ð¾Ð½Ð° позиÑÐ¸Ñ Ð¾ÐºÐ¾Ð½ÑÐ°Ð½Ð¸Ñ ÑезеÑвной копии в жÑÑнале ÑÑанзакÑий (коÑоÑÑÑ Ñакже можно игноÑиÑоваÑÑ). ÐоÑле запиÑи конеÑной позиÑии ÑекÑÑÐ°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð·Ð°Ð¿Ð¸Ñи авÑомаÑиÑеÑки пеÑемеÑаеÑÑÑ Ðº ÑледÑÑÑÐµÐ¼Ñ ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑнала ÑÑанзакÑий, ÑÑÐ¾Ð±Ñ Ñайл конеÑной позиÑии можно бÑло немедленно аÑÑ
ивиÑоваÑÑ Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑезеÑвного копиÑованиÑ.
pg_switch_xlog пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ Ð¿ÐµÑеклÑÑение на ÑледÑÑÑий Ñайл жÑÑнала ÑÑанзакÑий, ÑÑо позволÑÐµÑ Ð°ÑÑ
ивиÑоваÑÑ ÑекÑÑий (в ÑиÑÑаÑии, когда аÑÑ
иваÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ Ð½ÐµÐ¿ÑеÑÑвно). ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÐºÐ¾Ð½ÐµÑнÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ + 1 в ÑолÑко ÑÑо законÑенном Ñайле жÑÑнала ÑÑанзакÑий. ÐÑли Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа поÑледнего пеÑеклÑÑÐµÐ½Ð¸Ñ Ñайлов не бÑло акÑивноÑÑи, оÑÑажаÑÑейÑÑ Ð² жÑÑнале ÑÑанзакÑий, pg_switch_xlog ниÑего не Ð´ÐµÐ»Ð°ÐµÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð½Ð°ÑалÑнÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð² Ñайле жÑÑнала ÑÑанзакÑий, иÑполÑзÑемом в даннÑй моменÑ.
pg_create_restore_point ÑоздаÑÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½ÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² жÑÑнале ÑÑанзакÑий, коÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ ÐºÐ°Ðº ÑÐµÐ»Ñ Ð¿Ñи воÑÑÑановлении, и возвÑаÑÐ°ÐµÑ ÑооÑвеÑÑÑвÑÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð² жÑÑнале ÑÑанзакÑий. ÐаÑем полÑÑенное Ð¸Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑиÑвоиÑÑ Ð¿Ð°ÑамеÑÑÑ recovery_target_name, Ñказав Ñем ÑамÑм ÑоÑкÑ, до коÑоÑой бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð²Ð¾ÑÑÑановление. УÑÑиÑе, ÑÑо еÑли Ð²Ñ ÑоздадиÑе неÑколÑко ÑоÑек воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¾Ð´Ð½Ð¸Ð¼ именем, воÑÑÑановление бÑÐ´ÐµÑ Ð¾ÑÑановлено на пеÑвой ÑоÑке Ñ ÑÑим именем.
pg_current_xlog_location вÑÐ²Ð¾Ð´Ð¸Ñ ÑекÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð·Ð°Ð¿Ð¸Ñи в жÑÑнале ÑÑанзакÑий в Ñом же ÑоÑмаÑе, ÑÑо и вÑÑеопиÑаннÑе ÑÑнкÑии. pg_current_xlog_insert_location подобнÑм обÑазом вÑÐ²Ð¾Ð´Ð¸Ñ ÑекÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² жÑÑнале ÑÑанзакÑий. ÐозиÑией Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð°Ð·ÑваеÑÑÑ "логиÑеÑкий" ÐºÐ¾Ð½ÐµÑ Ð¶ÑÑнала ÑÑанзакÑий в лÑбой Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени, Ñогда как позиÑÐ¸Ñ Ð·Ð°Ð¿Ð¸Ñи ÑказÑÐ²Ð°ÐµÑ Ð½Ð° ÐºÐ¾Ð½ÐµÑ Ð´Ð°Ð½Ð½ÑÑ
, ÑакÑиÑеÑки пеÑенеÑÑннÑÑ
на диÑк из внÑÑÑенниÑ
бÑÑеÑов ÑеÑвеÑа. ÐозиÑÐ¸Ñ Ð·Ð°Ð¿Ð¸Ñи оÑмеÑÐ°ÐµÑ ÐºÐ¾Ð½ÐµÑ Ð´Ð°Ð½Ð½ÑÑ
, коÑоÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¸Ð´ÐµÑÑ ÑнаÑÑжи внеÑний пÑоÑеÑÑ, и именно она пÑедÑÑавлÑÐµÑ Ð¸Ð½ÑеÑÐµÑ Ð¿Ñи копиÑовании ÑаÑÑиÑно заполненнÑÑ
Ñайлов жÑÑнала ÑÑанзакÑий. ÐозиÑÐ¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÑводиÑÑÑ Ð² оÑновном Ð´Ð»Ñ Ð¾Ñладки. Ðбе ÑÑи ÑÑнкÑии ÑабоÑаÑÑ Ð² Ñежиме «ÑолÑко ÑÑение» и вÑзÑваÑÑ Ð¸Ñ
можно без пÑав ÑÑпеÑполÑзоваÑелÑ.
Ðз ÑезÑлÑÑаÑов вÑеÑ
опиÑаннÑÑ
вÑÑе ÑÑнкÑий можно полÑÑиÑÑ ÑооÑвеÑÑÑвÑÑÑее Ð¸Ð¼Ñ Ñайла жÑÑнала ÑÑанзакÑий и ÑмеÑение в нÑм, иÑполÑзÑÑ ÑÑнкÑÐ¸Ñ pg_xlogfile_name_offset. ÐапÑимеÑ:
postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
file_name | file_offset
--------------------------+-------------
00000001000000000000000D | 4039624
(1 row) ÐÐ¾Ð´Ð¾Ð±Ð½Ð°Ñ ÐµÐ¹ ÑÑнкÑÐ¸Ñ pg_xlogfile_name Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ ÑолÑко Ð¸Ð¼Ñ Ñайла жÑÑнала ÑÑанзакÑий. Ðогда позиÑÐ¸Ñ Ð² жÑÑнале ÑÑанзакÑий наÑ
одиÑÑÑ Ñовно на гÑаниÑе Ñайлов, обе ÑÑи ÑÑнкÑии возвÑаÑаÑÑ Ð¸Ð¼Ñ Ð¿ÑедÑдÑÑего Ñайла. ÐбÑÑно ÑÑо поведение пÑедпоÑÑиÑелÑно пÑи аÑÑ
ивиÑовании жÑÑнала, Ñак как именно пÑедÑдÑÑий Ñайл ÑвлÑеÑÑÑ Ð¿Ð¾Ñледним подлежаÑим аÑÑ
иваÑии.
pg_xlog_location_diff вÑÑиÑлÑÐµÑ ÑазниÑÑ Ð² байÑаÑ
Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð¿Ð¾Ð·Ð¸ÑиÑми в жÑÑнале ÑÑанзакÑий. ÐолÑÑеннÑй ÑезÑлÑÑÐ°Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ñ pg_stat_replication или дÑÑгими ÑÑнкÑиÑми, пеÑеÑиÑленнÑми в ТаблиÑе 9-65, Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð´ÐµÑжки ÑепликаÑии.
ÐодÑобнее пÑакÑиÑеÑкое пÑименение ÑÑÐ¸Ñ ÑÑнкÑий опиÑÑваеÑÑÑ Ð² Разделе 24.3.
9.26.4. ФÑнкÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾ÑÑÑановлением
ФÑнкÑии, пÑиведÑннÑе в ТаблиÑе 9-66, пÑедоÑÑавлÑÑÑ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑекÑÑем ÑоÑÑоÑнии ÑезеÑвного ÑеÑвеÑа. ÐÑи ÑÑнкÑии могÑÑ Ð²ÑполнÑÑÑÑÑ, как во вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑановлениÑ, Ñак и в обÑÑном Ñежиме ÑабоÑÑ.
ТаблиÑа 9-66. ФÑнкÑии Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о воÑÑÑановлении
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_is_in_recovery() | bool | ÐозвÑаÑÐ°ÐµÑ true в пÑоÑеÑÑе воÑÑÑановлениÑ. |
pg_last_xlog_receive_location() | pg_lsn | ÐолÑÑÐ°ÐµÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¿Ð¾Ñледней запиÑи жÑÑнала ÑÑанзакÑий, полÑÑенной и запиÑанной на диÑк в пÑоÑеÑÑе поÑоковой ÑепликаÑии. Ðока вÑполнÑеÑÑÑ Ð¿Ð¾ÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑиÑ, ÑÑа позиÑÐ¸Ñ Ð¿Ð¾ÑÑоÑнно ÑвелиÑиваеÑÑÑ. Ðо оконÑании воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð½Ð° оÑÑанавливаеÑÑÑ Ð½Ð° запиÑи WAL, полÑÑенной и запиÑанной на диÑк поÑледней. ÐÑли поÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑÐ¸Ñ Ð¾ÑклÑÑена или еÑÑ Ð½Ðµ запÑÑкалаÑÑ, ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ NULL. |
pg_last_xlog_replay_location() | pg_lsn | ÐолÑÑÐ°ÐµÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¿Ð¾Ñледней запиÑи жÑÑнала ÑÑанзакÑий, воÑпÑоизведÑнной пÑи воÑÑÑановлении. РпÑоÑеÑÑе воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑа позиÑÐ¸Ñ Ð¿Ð¾ÑÑоÑнно ÑвелиÑиваеÑÑÑ. Ðо оконÑании воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð½Ð° оÑÑанавливаеÑÑÑ Ð½Ð° запиÑи WAL, коÑоÑÐ°Ñ Ð±Ñла воÑÑÑановлена поÑледней. ÐÑли ÑеÑÐ²ÐµÑ Ð±Ñл запÑÑен не в Ñежиме воÑÑÑановлениÑ, ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ NULL. |
pg_last_xact_replay_timestamp() | timestamp with time zone | ÐолÑÑÐ°ÐµÑ Ð¾ÑмеÑÐºÑ Ð²Ñемени поÑледней ÑÑанзакÑии, воÑпÑоизведÑнной пÑи воÑÑÑановлении. ÐÑо вÑемÑ, когда на главном ÑеÑвеÑе пÑоизоÑла ÑикÑаÑÐ¸Ñ Ð¸Ð»Ð¸ оÑÐºÐ°Ñ Ð·Ð°Ð¿Ð¸Ñи WAL Ð´Ð»Ñ ÑÑой ÑÑанзакÑии. ÐÑли в пÑоÑеÑÑе воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ бÑла воÑпÑоизведена ни одна ÑÑанзакÑиÑ, ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ NULL. РпÑоÑивном ÑлÑÑае ÑÑо знаÑение поÑÑоÑнно ÑвелиÑиваеÑÑÑ Ð² пÑоÑеÑÑе воÑÑÑановлениÑ. Ðо оконÑании воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð½Ð¾ оÑÑанавливаеÑÑÑ Ð½Ð° ÑÑанзакÑии, коÑоÑÐ°Ñ Ð±Ñла воÑÑÑановлена поÑледней. ÐÑли ÑеÑÐ²ÐµÑ Ð±Ñл запÑÑен не в Ñежиме воÑÑÑановлениÑ, ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ NULL. |
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9-67 ÑпÑавлÑÑÑ Ð¿ÑоÑеÑÑом воÑÑÑановлениÑ. ÐÑзÑваÑÑ Ð¸Ñ Ð² дÑÑгое вÑÐµÐ¼Ñ Ð½ÐµÐ»ÑзÑ.
ТаблиÑа 9-67. ФÑнкÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾ÑÑÑановлением
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_is_xlog_replay_paused() | bool | ÐозвÑаÑÐ°ÐµÑ true, еÑли воÑÑÑановление пÑиоÑÑановлено. |
pg_xlog_replay_pause() | void | Ðемедленно пÑиоÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð²Ð¾ÑÑÑановление (ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм). |
pg_xlog_replay_resume() | void | ÐапÑÑÐºÐ°ÐµÑ Ð²Ð¾ÑÑÑановление, еÑли оно бÑло пÑиоÑÑановлено (ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм). |
Ðогда воÑÑÑановление пÑиоÑÑановлено, запиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в Ð±Ð°Ð·Ñ Ð½Ðµ пÑоизводиÑÑÑ. ÐÑли она Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² «Ð³Ð¾ÑÑÑем ÑезеÑве», вÑе поÑледÑÑÑие запÑоÑÑ Ð±ÑдÑÑ Ð²Ð¸Ð´ÐµÑÑ Ð¾Ð´Ð¸Ð½ ÑоглаÑованнÑй Ñнимок Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ до пÑÐ¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑликÑÑ Ð·Ð°Ð¿ÑоÑов иÑклÑÑаÑÑÑÑ.
Ðогда поÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑÐ¸Ñ Ð²ÑклÑÑена, паÑза пÑи воÑÑÑановлении Ð¼Ð¾Ð¶ÐµÑ Ð´Ð»Ð¸ÑÑÑÑ ÑÐºÐ¾Ð»Ñ Ñгодно долго без ÐºÐ°ÐºÐ¸Ñ -либо пÑоблем. ÐÑли же запÑÑена поÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑиÑ, новÑе запиÑи WAL пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°Ñ Ð¿Ð¾ÑÑÑпаÑÑ Ð¸ заполнÑÑ Ð²ÐµÑÑ Ð´Ð¸Ñк Ñано или поздно, в завиÑимоÑÑи Ð¾Ñ Ð´Ð»Ð¸ÑелÑноÑÑи паÑзÑ, инÑенÑивноÑÑи запиÑи в WAL и обÑÑма Ñвободного пÑоÑÑÑанÑÑва.
9.26.5. ФÑнкÑии ÑÐ¸Ð½Ñ ÑонизаÑии Ñнимков
PostgreSQL позволÑÐµÑ ÑÐ¸Ð½Ñ ÑонизиÑоваÑÑ Ñнимки ÑоÑÑоÑÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÑеанÑами баз даннÑÑ . Снимок ÑоÑÑоÑÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑеÑ, какие даннÑе Ð²Ð¸Ð´Ð½Ñ ÑÑанзакÑии, ÑабоÑаÑÑей Ñ ÑÑим Ñнимком. Ð¡Ð¸Ð½Ñ ÑонизаÑÐ¸Ñ Ñнимков Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð°, когда в двÑÑ Ð¸Ð»Ð¸ более ÑеанÑÐ°Ñ Ð½Ñжно видеÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же ÑодеÑжимое Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐÑли в двÑÑ ÑеанÑÐ°Ñ ÑÑанзакÑии запÑÑкаÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо, вÑегда еÑÑÑ Ð²ÐµÑоÑÑноÑÑÑ, ÑÑо Ð½ÐµÐºÐ°Ñ ÑÑеÑÑÑ ÑÑанзакÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð·Ð°ÑикÑиÑована Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸ START TRANSACTION Ð´Ð»Ñ Ð¿ÐµÑвÑÑ Ð´Ð²ÑÑ , и в ÑезÑлÑÑаÑе в одном ÑеанÑе бÑÐ´ÐµÑ Ð²Ð¸Ð´ÐµÐ½ ÑезÑлÑÑÐ°Ñ ÑÑеÑÑей, а в дÑÑгом — неÑ.
ÐÐ»Ñ ÑеÑÐµÐ½Ð¸Ñ ÑÑой пÑÐ¾Ð±Ð»ÐµÐ¼Ñ PostgreSQL позволÑÐµÑ ÑÑанзакÑии ÑкÑпоÑÑиÑоваÑÑ Ñнимок ÑоÑÑоÑниÑ, Ñ ÐºÐ¾ÑоÑÑм она ÑабоÑаеÑ. Ðока ÑкÑпоÑÑиÑÑÑÑÐ°Ñ ÑÑÐ¾Ñ Ñнимок ÑÑанзакÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ, дÑÑгие ÑÑанзакÑии могÑÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑоваÑÑ ÐµÐ³Ð¾ и, Ñаким обÑазом, ÑвидеÑÑ Ð°Ð±ÑолÑÑно Ñо же ÑоÑÑоÑние Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑо Ð²Ð¸Ð´Ð¸Ñ Ð¿ÐµÑÐ²Ð°Ñ ÑÑанзакÑиÑ. Ðо ÑÑÑиÑе, ÑÑо лÑбÑе изменениÑ, пÑоизведÑннÑе ÑÑими ÑÑанзакÑиÑми, бÑдÑÑ Ð½Ðµ Ð²Ð¸Ð´Ð½Ñ Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ , как ÑÑо и должно бÑÑÑ Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñми в незаÑикÑиÑованнÑÑ ÑÑанзакÑиÑÑ . Таким обÑазом, ÑÑанзакÑии ÑÐ¸Ð½Ñ ÑонизиÑÑÑÑ ÑолÑко наÑалÑное ÑоÑÑоÑние даннÑÑ , а поÑледÑÑÑие пÑоизводимÑе в Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¾Ð»Ð¸ÑÑÑÑÑÑ ÐºÐ°Ðº обÑÑно.
Снимки ÑоÑÑоÑÐ½Ð¸Ñ ÑкÑпоÑÑиÑÑÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии pg_export_snapshot, показанной в ТаблиÑе 9-68, и импоÑÑиÑÑÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ SET TRANSACTION.
ТаблиÑа 9-68. ФÑнкÑии ÑÐ¸Ð½Ñ ÑонизаÑии Ñнимков
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_export_snapshot() | text | Ð¡Ð¾Ñ ÑанÑÐµÑ Ñнимок ÑекÑÑего ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾ иденÑиÑикаÑÐ¾Ñ |
ФÑнкÑÐ¸Ñ pg_export_snapshot ÑоздаÑÑ Ñнимок ÑекÑÑего ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾ иденÑиÑикаÑÐ¾Ñ Ð² ÑÑÑоке Ñипа text. ÐÐ°Ð½Ð½Ð°Ñ ÑÑÑока должна пеÑедаваÑÑÑÑ (за Ñамками Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
) клиенÑам, коÑоÑÑе бÑдÑÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑоваÑÑ ÑÑÐ¾Ñ Ñнимок. ÐÑи ÑÑом импоÑÑиÑоваÑÑ ÐµÐ³Ð¾ нÑжно ÑанÑÑе, Ñем завеÑÑиÑÑÑ ÑÑанзакÑиÑ, коÑоÑÐ°Ñ ÐµÐ³Ð¾ ÑкÑпоÑÑиÑовала. ÐÑли необÑ
одимо, ÑÑанзакÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑкÑпоÑÑиÑоваÑÑ Ð½ÐµÑколÑко Ñнимков. ÐамеÑÑÑе, ÑÑо ÑÑо Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑолÑко Ð´Ð»Ñ ÑÑанзакÑий ÑÑÐ¾Ð²Ð½Ñ READ COMMITTED, Ñак как ÑÑанзакÑии REPEATABLE READ и более вÑÑокиÑ
ÑÑовней изолÑÑии ÑабоÑаÑÑ Ñ Ð¾Ð´Ð½Ð¸Ð¼ Ñнимком ÑоÑÑоÑниÑ. ÐоÑле Ñого, как ÑÑанзакÑÐ¸Ñ ÑкÑпоÑÑиÑовала Ñнимок, ÐµÑ Ð½ÐµÐ»ÑÐ·Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ PREPARE TRANSACTION.
ÐодÑобнее иÑполÑзование ÑкÑпоÑÑиÑованнÑÑ Ñнимков ÑаÑÑмаÑÑиваеÑÑÑ Ð² опиÑании SET TRANSACTION.
9.26.6. ФÑнкÑии ÑепликаÑии
РТаблиÑе 9-69 пеÑеÑиÑÐ»ÐµÐ½Ñ ÑÑнкÑии, пÑедназнаÑеннÑе Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ взаимодейÑÑÐ²Ð¸Ñ Ñ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ ÑепликаÑии. ЧÑÐ¾Ð±Ñ ÑзнаÑÑ Ð¾Ð± ÑÑом Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ðµ подÑобнее, обÑаÑиÑеÑÑ Ðº ÐодÑÐ°Ð·Ð´ÐµÐ»Ñ 25.2.5 и ÐодÑаздел 25.2.6. ÐÑполÑзоваÑÑ ÑÑи ÑÑнкÑии ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм.
Ðногие из ÑÑÐ¸Ñ ÑÑнкÑий ÑооÑвеÑÑÑвÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼ в пÑоÑоколе ÑепликаÑии; Ñм. Раздел 49.3.
ФÑнкÑии, опиÑаннÑе в ÐодÑазделе 9.26.5, ÐодÑазделе 9.26.4 и ÐодÑазделе 9.26.3 Ñакже имеÑÑ Ð¾ÑноÑение к ÑепликаÑии.
ТаблиÑа 9-69. ФÑнкÑии ÑепликаÑии SQL
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_create_physical_replication_slot(slot_name name) | (slot_name name, xlog_position pg_lsn) | СоздаÑÑ Ð½Ð¾Ð²Ñй ÑизиÑеÑкий ÑÐ»Ð¾Ñ ÑепликаÑии Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ slot_name. ÐеÑедаÑа изменений из ÑизиÑеÑкого ÑлоÑа возможна ÑолÑко по пÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¿Ð¾Ñоковой ÑепликаÑии — Ñм. Раздел 49.3. СооÑвеÑÑÑвÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ пÑоÑокола ÑепликаÑии CREATE_REPLICATION_SLOT ... PHYSICAL. |
pg_drop_replication_slot(slot_name name) | void | УдалÑÐµÑ ÑизиÑеÑкий или логиÑеÑкий ÑÐ»Ð¾Ñ ÑепликаÑии Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ slot_name. СооÑвеÑÑÑвÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ пÑоÑокола ÑепликаÑии DROP_REPLICATION_SLOT. |
pg_create_logical_replication_slot(slot_name name, plugin name) | (slot_name name, xlog_position pg_lsn) | СоздаÑÑ Ð½Ð¾Ð²Ñй логиÑеÑкий (декодиÑÑÑÑий) ÑÐ»Ð¾Ñ ÑепликаÑии Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ slot_name, иÑполÑзÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð²Ñвода plugin. ÐÑа ÑÑнкÑÐ¸Ñ ÑабоÑÐ°ÐµÑ Ñак же, как и команда пÑоÑокола ÑепликаÑии CREATE_REPLICATION_SLOT ... LOGICAL. |
pg_logical_slot_get_changes(slot_name name, upto_lsn pg_lsn, upto_nchanges int, VARIADIC options text[]) | (location pg_lsn, xid xid, data text) | ÐозвÑаÑÐ°ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑлоÑе slot_name Ñ Ð¿Ð¾Ð·Ð¸Ñии, до коÑоÑой Ñанее бÑли полÑÑÐµÐ½Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ. ÐÑли паÑамеÑÑÑ upto_lsn и upto_nchanges ÑÐ°Ð²Ð½Ñ NULL, логиÑеÑкое декодиÑование пÑодолжиÑÑÑ Ð´Ð¾ конÑа жÑÑнала ÑÑанзакÑий. ÐÑли upto_lsn не NULL, декодиÑоваÑÑÑÑ Ð±ÑдÑÑ ÑолÑко ÑÑанзакÑии, заÑикÑиÑованнÑе до заданного LSN. ÐÑли upto_nchanges не NULL, декодиÑование оÑÑановиÑÑÑ, когда ÑиÑло ÑÑÑок, полÑÑеннÑÑ Ð¿Ñи декодиÑовании, пÑевÑÑÐ¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ðµ знаÑение. ÐамеÑÑÑе, однако, ÑÑо ÑакÑиÑеÑкое ÑиÑло возвÑаÑÑннÑÑ ÑÑÑок Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÑÑе, Ñак как ÑÑо огÑаниÑение пÑовеÑÑеÑÑÑ ÑолÑко поÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑÑок, декодиÑованнÑÑ Ð´Ð»Ñ Ð¾ÑеÑедной ÑÑанзакÑии. |
pg_logical_slot_peek_changes(slot_name name, upto_lsn pg_lsn, upto_nchanges int, VARIADIC options text[]) | (location text, xid xid, data text) | РабоÑÐ°ÐµÑ Ñак же, как ÑÑнкÑÐ¸Ñ pg_logical_slot_get_changes(), но не забиÑÐ°ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ; Ñо еÑÑÑ, они бÑдÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ñ Ñнова пÑи ÑледÑÑÑиÑ
вÑзоваÑ
. |
pg_logical_slot_get_binary_changes(slot_name name, upto_lsn pg_lsn, upto_nchanges int, VARIADIC options text[]) | (location pg_lsn, xid xid, data bytea) | РабоÑÐ°ÐµÑ Ñак же, как ÑÑнкÑÐ¸Ñ pg_logical_slot_get_changes(), но вÑдаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñипе bytea. |
pg_logical_slot_peek_binary_changes(slot_name name, upto_lsn pg_lsn, upto_nchanges int, VARIADIC options text[]) | (location pg_lsn, xid xid, data bytea) | РабоÑÐ°ÐµÑ Ñак же, как ÑÑнкÑÐ¸Ñ pg_logical_slot_get_changes(), но вÑдаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñипе bytea и не забиÑÐ°ÐµÑ Ð¸Ñ
; Ñо еÑÑÑ, они бÑдÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ñ Ñнова пÑи ÑледÑÑÑиÑ
вÑзоваÑ
. |
9.26.7. ФÑнкÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑами баз даннÑÑ
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9-70, вÑÑиÑлÑÑÑ Ð¾Ð±ÑÑм, коÑоÑÑй занимаÑÑ Ð½Ð° диÑке ÑазлиÑнÑе обÑекÑÑ Ð±Ð°Ð· даннÑÑ .
ТаблиÑа 9-70. ФÑнкÑии полÑÑÐµÐ½Ð¸Ñ ÑазмеÑа обÑекÑов ÐÐ
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_column_size(any) | int | ЧиÑло байÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ знаÑÐµÐ½Ð¸Ñ (возможно, в ÑжаÑом виде) |
pg_database_size(oid) | bigint | ÐбÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке база даннÑÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм OID |
pg_database_size(name) | bigint | ÐбÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке база даннÑÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм именем |
pg_indexes_size(regclass) | bigint | ÐбÑий обÑÑм индекÑов, ÑвÑзаннÑÑ Ñ Ñказанной ÑаблиÑей |
pg_relation_size(relation regclass, fork text) | bigint | ÐбÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке ÑказаннÑй Ñлой ('main', 'fsm', 'vm' или 'init') заданной ÑаблиÑÑ Ð¸Ð»Ð¸ индекÑа |
pg_relation_size(relation regclass) | bigint | ÐÑаÑÐºÐ°Ñ ÑоÑма pg_relation_size(..., 'main') |
pg_size_pretty(bigint) | text | ÐÑеобÑазÑÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð² байÑÐ°Ñ , пÑедÑÑавленнÑй в 64-биÑном Ñелом, в понÑÑнÑй ÑÐµÐ»Ð¾Ð²ÐµÐºÑ ÑоÑÐ¼Ð°Ñ Ñ ÐµÐ´Ð¸Ð½Ð¸Ñами измеÑÐµÐ½Ð¸Ñ |
pg_size_pretty(numeric) | text | ÐÑеобÑазÑÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð² байÑÐ°Ñ , пÑедÑÑавленнÑй в знаÑении ÑиÑлового Ñипа, в понÑÑнÑй ÑÐµÐ»Ð¾Ð²ÐµÐºÑ ÑоÑÐ¼Ð°Ñ Ñ ÐµÐ´Ð¸Ð½Ð¸Ñами измеÑÐµÐ½Ð¸Ñ |
pg_table_size(regclass) | bigint | ÐбÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке Ð´Ð°Ð½Ð½Ð°Ñ ÑаблиÑа, за иÑклÑÑением индекÑов (но вклÑÑÐ°Ñ TOAST, каÑÑÑ Ñвободного меÑÑа и каÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи) |
pg_tablespace_size(oid) | bigint | ÐбÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке ÑаблиÑное пÑоÑÑÑанÑÑво Ñ ÑказаннÑм OID |
pg_tablespace_size(name) | bigint | ÐбÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке ÑаблиÑное пÑоÑÑÑанÑÑво Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм именем |
pg_total_relation_size(regclass) | bigint | ÐбÑий обÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑаблиÑа, вклÑÑÐ°Ñ Ð²Ñе индекÑÑ Ð¸ даннÑе TOAST |
pg_column_size показÑваеÑ, какой обÑÑм ÑÑебÑеÑÑÑ Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ знаÑениÑ.
pg_total_relation_size пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ OID или Ð¸Ð¼Ñ ÑаблиÑÑ Ð¸Ð»Ð¸ даннÑÑ
TOAST и возвÑаÑÐ°ÐµÑ Ð¾Ð±Ñий обÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке ÑÑа ÑаблиÑа, вклÑÑÐ°Ñ Ð²Ñе ÑвÑзаннÑе Ñ Ð½ÐµÐ¹ индекÑÑ. РезÑлÑÑÐ°Ñ ÑÑой ÑÑнкÑии ÑавнÑеÑÑÑ pg_table_size + pg_indexes_size.
pg_table_size пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ OID или Ð¸Ð¼Ñ ÑаблиÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÑм, коÑоÑÑй Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке ÑÑа ÑаблиÑа без индекÑов. (ÐÑи ÑÑом ÑÑиÑÑваеÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ TOAST, каÑÑÑ Ñвободного меÑÑа и каÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи.)
pg_indexes_size пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ OID или Ð¸Ð¼Ñ ÑаблиÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð¾Ð±Ñий обÑÑм, коÑоÑÑй занимаÑÑ Ð²Ñе индекÑÑ ÑаблиÑÑ.
pg_database_size и pg_tablespace_size пÑинимаÑÑ OID или Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
либо ÑаблиÑного пÑоÑÑÑанÑÑва и возвÑаÑаÑÑ Ð¾Ð±Ñий обÑÑм, коÑоÑÑй они занимаÑÑ Ð½Ð° диÑке. ÐÐ»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ pg_database_size ÑÑебÑеÑÑÑ Ð¿Ñаво CONNECT Ð´Ð»Ñ Ñказанной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
(оно имееÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ). ÐÐ»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ pg_tablespace_size необÑ
одимо имеÑÑ Ð¿Ñаво CREATE в Ñказанном ÑаблиÑном пÑоÑÑÑанÑÑве, еÑли ÑолÑко ÑÑо не ÑаблиÑное пÑоÑÑÑанÑÑво по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
pg_relation_size пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ OID или Ð¸Ð¼Ñ ÑаблиÑÑ, индекÑа или TOAST-ÑаблиÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑÐ»Ð¾Ñ ÑÑого оÑноÑÐµÐ½Ð¸Ñ (в байÑаÑ
). (ÐамеÑÑÑе, ÑÑо в болÑÑинÑÑве ÑлÑÑае Ñдобнее иÑполÑзоваÑÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокоÑÑовневÑе ÑÑнкÑии pg_total_relation_size и pg_table_size, коÑоÑÑе ÑÑммиÑÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð²ÑеÑ
ÑлоÑв.) С одним аÑгÑменÑом она возвÑаÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ñновного ÑÐ»Ð¾Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
заданного оÑноÑениÑ. Ðазвание дÑÑгого инÑеÑеÑÑÑÑего ÑÐ»Ð¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑедаÑÑ Ð²Ð¾ вÑоÑом аÑгÑменÑе:
'main' возвÑаÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ñновного ÑÐ»Ð¾Ñ Ð´Ð°Ð½Ð½ÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ оÑноÑениÑ.
'fsm' возвÑаÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ°ÑÑÑ Ñвободного меÑÑа (Ñм. Раздел 59.3), ÑвÑзанной Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм оÑноÑением.
'vm' возвÑаÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи (Ñм. Раздел 59.4), ÑвÑзанной Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм оÑноÑением.
'init' возвÑаÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÑÐ»Ð¾Ñ Ð¸Ð½Ð¸ÑиализаÑии Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ оÑноÑениÑ, еÑли он имееÑÑÑ.
pg_size_pretty можно иÑполÑзоваÑÑ Ð´Ð»Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑезÑлÑÑаÑов дÑÑгиÑ
ÑÑнкÑий в виде, более понÑÑном ÑеловекÑ, Ñ ÐµÐ´Ð¸Ð½Ð¸Ñами измеÑÐµÐ½Ð¸Ñ KB, MB, GB и TB.
ÐÑÑеопиÑаннÑе ÑÑнкÑии, ÑабоÑаÑÑие Ñ ÑаблиÑами или индекÑами, пÑинимаÑÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ñипа regclass, коÑоÑÑй пÑедÑÑавлÑÐµÑ Ñобой пÑоÑÑо OID ÑаблиÑÑ Ð¸Ð»Ð¸ индекÑа в ÑиÑÑемном каÑалоге pg_class. Ðднако вам не нÑжно вÑÑÑнÑÑ Ð²ÑÑиÑлÑÑÑ OID, Ñак как пÑоÑедÑÑа ввода знаÑÐµÐ½Ð¸Ñ regclass Ð¼Ð¾Ð¶ÐµÑ ÑделаÑÑ ÑÑо за ваÑ. ÐÐ»Ñ ÑÑого доÑÑаÑоÑно запиÑаÑÑ Ð¸Ð¼Ñ ÑаблиÑÑ Ð² апоÑÑÑоÑÐ°Ñ , как обÑÑнÑÑ ÑекÑÑовÑÑ ÐºÐ¾Ð½ÑÑанÑÑ. Ð ÑооÑвеÑÑÑвии Ñ Ð¿Ñавилами обÑабоÑки обÑÑнÑÑ Ð¸Ð¼Ñн SQL, еÑли Ð¸Ð¼Ñ ÑаблиÑÑ Ð½Ðµ заклÑÑено в кавÑÑки, ÑÑа ÑÑÑока бÑÐ´ÐµÑ Ð¿ÐµÑеведена в нижний ÑегиÑÑÑ.
ÐÑли пеÑÐµÐ´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ OID не ÑооÑвеÑÑÑвÑÑÑ ÑÑÑеÑÑвÑÑÑий обÑекÑ, ÑÑи ÑÑнкÑии возвÑаÑаÑÑ NULL.
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9-71, помогаÑÑ Ð¾Ð¿ÑеделиÑÑ, в ÐºÐ°ÐºÐ¸Ñ ÑÐ°Ð¹Ð»Ð°Ñ Ð½Ð° диÑке Ñ ÑанÑÑÑÑ Ð¾Ð±ÑекÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
ТаблиÑа 9-71. ФÑнкÑии опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_relation_filenode(relation regclass) | oid | ÐÐ¾Ð¼ÐµÑ Ñайлового Ñзла Ð´Ð»Ñ Ñказанного оÑноÑÐµÐ½Ð¸Ñ |
pg_relation_filepath(relation regclass) | text | ÐÑÑÑ Ðº ÑайлÑ, в коÑоÑом Ñ ÑаниÑÑÑ Ñказанное оÑноÑение |
pg_filenode_relation(tablespace oid, filenode oid) | regclass | ÐÐ°Ñ Ð¾Ð´Ð¸Ñ Ð¾ÑноÑение, ÑвÑзанное Ñ Ð´Ð°Ð½Ð½Ñм ÑаблиÑнÑм пÑоÑÑÑанÑÑвом и ÑайловÑм Ñзлом |
pg_relation_filenode пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ OID или Ð¸Ð¼Ñ ÑаблиÑÑ, индекÑа, поÑледоваÑелÑноÑÑи или ÑаблиÑÑ TOAST и возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð¼ÐµÑ "Ñайлового Ñзла", ÑвÑзаннÑм Ñ ÑÑим обÑекÑом. ФайловÑм Ñзлом назÑваеÑÑÑ Ð¾Ñновной ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ñайла, иÑполÑзÑемого Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
(подÑобнее ÑÑо опиÑано в Разделе 59.1). ÐÐ»Ñ Ð±Ð¾Ð»ÑÑинÑÑва ÑÐ°Ð±Ð»Ð¸Ñ ÑÑÐ¾Ñ Ð½Ð¾Ð¼ÐµÑ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñо знаÑением pg_class.relfilenode, но Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
ÑиÑÑемнÑÑ
каÑалогов relfilenode Ñавен 0, и нÑжно иÑполÑзоваÑÑ ÑÑÑ ÑÑнкÑиÑ, ÑÑÐ¾Ð±Ñ ÑзнаÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑное знаÑение. ÐÑли Ñказанное оÑноÑение не Ñ
ÑаниÑÑÑ Ð½Ð° диÑке, как напÑÐ¸Ð¼ÐµÑ Ð¿ÑедÑÑавление, Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ NULL.
pg_relation_filepath подобна pg_relation_filenode, но возвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð»Ð½Ñй пÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ (оÑноÑиÑелÑно каÑалога даннÑÑ
PGDATA) оÑноÑениÑ.
ФÑнкÑÐ¸Ñ pg_filenode_relation ÑвлÑеÑÑÑ Ð¾Ð±ÑаÑной к pg_relation_filenode. Ðна возвÑаÑÐ°ÐµÑ OID оÑноÑÐµÐ½Ð¸Ñ Ð¿Ð¾ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ OID "ÑаблиÑного пÑоÑÑÑанÑÑва" и "ÑÐ°Ð¹Ð»Ð¾Ð²Ð¾Ð¼Ñ ÑзлÑ". ÐÐ»Ñ ÑаблиÑÑ Ð² ÑаблиÑном пÑоÑÑÑанÑÑве по ÑмолÑÐ°Ð½Ð¸Ñ Ð² пеÑвом паÑамеÑÑе можно пеÑедаÑÑ 0.
9.26.8. ФÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¾Ð±ÑÑнÑми Ñайлами
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9-72, пÑедоÑÑавлÑÑÑ Ð¿ÑÑмой доÑÑÑп к Ñайлам, Ð½Ð°Ñ Ð¾Ð´ÑÑимÑÑ Ð½Ð° ÑеÑвеÑе. Ðни позволÑÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ ÑолÑко к Ñайлам в каÑалоге клаÑÑеÑа баз даннÑÑ (по оÑноÑиÑелÑÐ½Ð¾Ð¼Ñ Ð¿ÑÑи) или в каÑалоге log_directory (по пÑÑи, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð² паÑамеÑÑе конÑигÑÑаÑии log_directory). ÐÑполÑзоваÑÑ ÑÑи ÑÑнкÑии могÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.
ТаблиÑа 9-72. ФÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¾Ð±ÑÑнÑми Ñайлами
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_ls_dir(dirname text) | setof text | ÐозвÑаÑÐ°ÐµÑ ÑпиÑок ÑодеÑжимого каÑалога |
pg_read_file(filename text [, offset bigint, length bigint]) | text | ÐозвÑаÑÐ°ÐµÑ ÑодеÑжимое ÑекÑÑового Ñайла |
pg_read_binary_file(filename text [, offset bigint, length bigint]) | bytea | ÐозвÑаÑÐ°ÐµÑ ÑодеÑжимое Ñайла |
pg_stat_file(filename text) | record | ÐозвÑаÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñайле |
pg_ls_dir возвÑаÑÐ°ÐµÑ Ð¸Ð¼ÐµÐ½Ð° вÑеÑ
Ñайлов и подкаÑалогов в заданном каÑалоге, за иÑклÑÑением ÑпеÑиалÑнÑÑ
ÑлеменÑов "." и "..".
pg_read_file возвÑаÑÐ°ÐµÑ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÑекÑÑового Ñайла Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑмеÑÐµÐ½Ð¸Ñ (offset), ÑазмеÑом не болÑÑе length Ð±Ð°Ð¹Ñ (ÑÐ°Ð·Ð¼ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼ÐµÐ½ÑÑе, еÑли Ñайл конÑиÑÑÑ ÑанÑÑе). ÐÑли ÑмеÑение offset оÑÑиÑаÑелÑно, оно оÑÑÑиÑÑваеÑÑÑ Ð¾Ñ ÐºÐ¾Ð½Ñа Ñайла. ÐÑли паÑамеÑÑÑ offset и length опÑÑенÑ, возвÑаÑаеÑÑÑ Ð²ÑÑ ÑодеÑжимое Ñайла. ÐÑоÑиÑаннÑе из Ñайла байÑÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ ÐºÐ°Ðº ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑеÑвеÑной кодиÑовке; еÑли они оказÑваÑÑÑÑ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑимÑми Ð´Ð»Ñ ÑÑой кодиÑовки, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка.
pg_read_binary_file подобна pg_read_file, но ÐµÑ ÑезÑлÑÑÐ°Ñ Ð¸Ð¼ÐµÐµÑ Ñип bytea; как ÑледÑÑвие, никакие пÑовеÑки кодиÑовки не вÑполнÑÑÑÑÑ. Ð ÑоÑеÑании Ñ convert_from ÑÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑименÑÑÑ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ñайлов в пÑоизволÑной кодиÑовке:
SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');pg_stat_file возвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ, ÑодеÑжаÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ñайла, вÑÐµÐ¼Ñ Ð¿Ð¾Ñледнего обÑаÑÐµÐ½Ð¸Ñ Ð¸ поÑледнего изменениÑ, а Ñакже вÑÐµÐ¼Ñ Ð¿Ð¾Ñледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ (ÑолÑко в Unix-ÑиÑÑемаÑ
), вÑÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ (ÑолÑко в Windows) и пÑизнак Ñипа boolean, показÑваÑÑий, ÑÑо ÑÑо каÑалог. ÐÑимеÑÑ Ð¸ÑполÑзованиÑ:
SELECT * FROM pg_stat_file('filename');
SELECT (pg_stat_file('filename')).modification;9.26.9. ФÑнкÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑекомендаÑелÑнÑми блокиÑовками
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9-73, пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑекомендаÑелÑнÑми блокиÑовками. ÐодÑобнее об Ð¸Ñ Ð¸ÑполÑзовании можно ÑзнаÑÑ Ð² ÐодÑазделе 13.3.5.
ТаблиÑа 9-73. ФÑнкÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑекомендаÑелÑнÑми блокиÑовками
| ÐÐ¼Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
pg_advisory_lock(key bigint) | void | ÐолÑÑÐ°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа |
pg_advisory_lock(key1 int, key2 int) | void | ÐолÑÑÐ°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа |
pg_advisory_lock_shared(key bigint) | void | ÐолÑÑÐ°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа |
pg_advisory_lock_shared(key1 int, key2 int) | void | ÐолÑÑÐ°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа |
pg_advisory_unlock(key bigint) | boolean | ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа |
pg_advisory_unlock(key1 int, key2 int) | boolean | ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа |
pg_advisory_unlock_all() | void | ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð²Ñе блокиÑовки на ÑÑовне ÑеанÑа, ÑдеÑживаемÑе в данном ÑеанÑе |
pg_advisory_unlock_shared(key bigint) | boolean | ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа |
pg_advisory_unlock_shared(key1 int, key2 int) | boolean | ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа |
pg_advisory_xact_lock(key bigint) | void | ÐолÑÑÐ°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑÑанзакÑии |
pg_advisory_xact_lock(key1 int, key2 int) | void | ÐолÑÑÐ°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑÑанзакÑии |
pg_advisory_xact_lock_shared(key bigint) | void | ÐолÑÑÐ°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑÑанзакÑии |
pg_advisory_xact_lock_shared(key1 int, key2 int) | void | ÐолÑÑÐ°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑÑанзакÑии |
pg_try_advisory_lock(key bigint) | boolean | ÐолÑÑÐ°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа, еÑли ÑÑо возможно |
pg_try_advisory_lock(key1 int, key2 int) | boolean | ÐолÑÑÐ°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа, еÑли ÑÑо возможно |
pg_try_advisory_lock_shared(key bigint) | boolean | ÐолÑÑÐ°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа, еÑли ÑÑо возможно |
pg_try_advisory_lock_shared(key1 int, key2 int) | boolean | ÐолÑÑÐ°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа, еÑли ÑÑо возможно |
pg_try_advisory_xact_lock(key bigint) | boolean | ÐолÑÑÐ°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑÑанзакÑии, еÑли ÑÑо возможно |
pg_try_advisory_xact_lock(key1 int, key2 int) | boolean | ÐолÑÑÐ°ÐµÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑÑанзакÑии, еÑли ÑÑо возможно |
pg_try_advisory_xact_lock_shared(key bigint) | boolean | ÐолÑÑÐ°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑÑанзакÑии, еÑли ÑÑо возможно |
pg_try_advisory_xact_lock_shared(key1 int, key2 int) | boolean | ÐолÑÑÐ°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑÑанзакÑии, еÑли ÑÑо возможно |
pg_advisory_lock блокиÑÑÐµÑ Ð¾Ð¿ÑеделÑннÑй пÑиложением ÑеÑÑÑÑ, задаваемÑй одним 64-биÑнÑм или двÑÐ¼Ñ 32-биÑнÑми клÑÑами (замеÑÑÑе, ÑÑо иÑ
знаÑÐµÐ½Ð¸Ñ Ð½Ðµ пеÑеÑекаÑÑÑÑ). ÐÑли иденÑиÑикаÑÐ¾Ñ ÑÑого ÑеÑÑÑÑа ÑдеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð´ÑÑгой ÑеанÑ, ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ завеÑÑиÑÑÑ, пока ÑеÑÑÑÑ Ð½Ðµ ÑÑÐ°Ð½ÐµÑ Ð´Ð¾ÑÑÑпнÑм. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð² иÑклÑÑиÑелÑном Ñежиме. ÐÑли поÑÑÑÐ¿Ð°ÐµÑ ÑÑÐ°Ð·Ñ Ð½ÐµÑколÑко запÑоÑов на блокиÑовкÑ, они накапливаÑÑÑÑ, Ñак ÑÑо еÑли один ÑеÑÑÑÑ Ð±Ñл заблокиÑован ÑÑи Ñаза, его необÑ
одимо ÑÑи Ñаза ÑазблокиÑоваÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð½ бÑл доÑÑÑпен в дÑÑгиÑ
ÑеанÑаÑ
.
pg_advisory_lock_shared ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ pg_advisory_lock, но позволÑÐµÑ ÑазделÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ñ Ð´ÑÑгими ÑеанÑами, запÑаÑиваÑÑими ÐµÑ ÐºÐ°Ðº ÑазделÑемÑÑ. ÐÑполнение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑиоÑÑановлено, ÑолÑко еÑли дÑÑгой ÑÐµÐ°Ð½Ñ Ð·Ð°Ð¿ÑоÑил ÐµÑ Ð² иÑклÑÑиÑелÑном Ñежиме.
pg_try_advisory_lock ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ pg_advisory_lock, но не ждÑÑ Ð¾ÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑеÑÑÑÑа. ÐÑа ÑÑнкÑÐ¸Ñ Ð»Ð¸Ð±Ð¾ немедленно полÑÑÐ°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð¸ возвÑаÑÐ°ÐµÑ true, либо ÑÑÐ°Ð·Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ false, еÑли полÑÑиÑÑ ÐµÑ Ð½Ðµ ÑдаÑÑÑÑ.
pg_try_advisory_lock_shared ÑабоÑÐ°ÐµÑ ÐºÐ°Ðº pg_try_advisory_lock, но пÑÑаеÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑазделÑемÑÑ, а не иÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ.
pg_advisory_unlock оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ñанее полÑÑеннÑÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа. ÐÑли блокиÑовка оÑвобождена ÑÑпеÑна, ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ true, а еÑли она не бÑла занÑÑа — false, пÑи ÑÑом ÑеÑÐ²ÐµÑ Ð²ÑдаÑÑ Ð¿ÑедÑпÑеждение SQL.
pg_advisory_unlock_shared ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ pg_advisory_unlock, но оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑÑовне ÑеанÑа.
pg_advisory_unlock_all оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð²Ñе блокиÑовки на ÑÑовне ÑеанÑа, закÑеплÑннÑе за ÑекÑÑим ÑеанÑом. (ÐÑа ÑÑнкÑÐ¸Ñ Ð½ÐµÑвно вÑзÑваеÑÑÑ Ð² конÑе лÑбого ÑеанÑа, даже пÑи неÑÑаÑном оÑклÑÑении клиенÑа.)
pg_advisory_xact_lock ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ pg_advisory_lock, но ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовка авÑомаÑиÑеÑки оÑвобождаеÑÑÑ Ð² конÑе ÑекÑÑей ÑÑанзакÑии и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñвобождена ÑвнÑм обÑазом.
pg_advisory_xact_lock_shared подобна ÑÑнкÑии pg_advisory_lock_shared, но ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовка авÑомаÑиÑеÑки оÑвобождаеÑÑÑ Ð² конÑе ÑекÑÑей ÑÑанзакÑии и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñвобождена ÑвнÑм обÑазом.
pg_try_advisory_xact_lock ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ pg_try_advisory_lock, но ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовка (еÑли она бÑла полÑÑена) авÑомаÑиÑеÑки оÑвобождаеÑÑÑ Ð² конÑе ÑекÑÑей ÑÑанзакÑии и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñвобождена ÑвнÑм обÑазом.
pg_try_advisory_xact_lock_shared ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ pg_try_advisory_lock_shared, но ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовка (еÑли она бÑла полÑÑена) авÑомаÑиÑеÑки оÑвобождаеÑÑÑ Ð² конÑе ÑекÑÑей ÑÑанзакÑии и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñвобождена ÑвнÑм обÑазом.
| ÐÑед. | ÐаÑало | След. |
| СиÑÑемнÑе инÑоÑмаÑионнÑе ÑÑнкÑии | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | ТÑиггеÑнÑе ÑÑнкÑии |