This file is indexed.

/usr/share/perl5/pgBackRest/Config/ConfigHelpData.pm is in pgbackrest 1.12-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
####################################################################################################################################
# CONFIG HELP DATA MODULE
#
# This module is automatically generated by doc.pl and should never be manually edited.
####################################################################################################################################
package pgBackRest::Config::ConfigHelpData;

use strict;
use warnings FATAL => qw(all);
use Carp qw(confess);

use Exporter qw(import);
    our @EXPORT = qw();

####################################################################################################################################
# Data used by the ConfigHelp module to generate command-line help
####################################################################################################################################
my $oConfigHelpData =
{
    # Option Help
    #-------------------------------------------------------------------------------------------------------------------------------
    option =>
    {
        # ARCHIVE-ASYNC Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'archive-async' =>
        {
            section => 'archive',
            summary =>
                "Archive WAL segments asynchronously.",
            description =>
                "WAL segments will be copied to the local repo, then a process will be forked to compress the segment and " .
                    "transfer it to the remote repo if configured. Control will be returned to PostgreSQL as soon as the WAL " .
                    "segment is copied locally."
        },

        # ARCHIVE-CHECK Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'archive-check' =>
        {
            section => 'backup',
            summary =>
                "Check that WAL segments are present in the archive before backup completes.",
            description =>
                "Checks that all WAL segments required to make the backup consistent are present in the WAL archive. It's a " .
                    "good idea to leave this as the default unless you are using another method for archiving."
        },

        # ARCHIVE-COPY Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'archive-copy' =>
        {
            section => 'backup',
            summary =>
                "Copy WAL segments needed for consistency to the backup.",
            description =>
                "This slightly paranoid option protects against corruption or premature expiration in the WAL segment archive " .
                    "by storing the WAL segments directly in the backup. PITR won't be possible without the WAL segment archive " .
                    "and this option also consumes more space.\n" .
                "\n" .
                "Even though WAL segments will be restored with the backup, PostgreSQL will ignore them if a recovery.conf file " .
                    "exists and instead use archive_command to fetch WAL segments. Specifying type=none when restoring will not " .
                    "create recovery.conf and force PostgreSQL to use the WAL segments in pg_xlog. This will get the database " .
                    "cluster to a consistent state."
        },

        # ARCHIVE-MAX-MB Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'archive-max-mb' =>
        {
            section => 'archive',
            summary =>
                "Limit size of the local asynchronous archive queue when archive-async=y.",
            description =>
                "After the limit is reached, the following will happen:\n" .
                "\n" .
                "* pgBackRest will notify Postgres that the archive was successfully backed up, then DROP IT.\n" .
                "* An error will be logged to the console and also to the Postgres log.\n" .
                "* A stop file will be written in the lock directory and no more archive files will be backed up until it is " .
                    "removed.\n" .
                "\n" .
                "If this occurs then the archive log stream will be interrupted and PITR will not be possible past that point. " .
                    "A new backup will be required to regain full restore capability.\n" .
                "\n" .
                "The purpose of this feature is to prevent the log volume from filling up at which point Postgres will stop " .
                    "completely. Better to lose the backup than have PostgreSQL go down.\n" .
                "\n" .
                "To start normal archiving again you'll need to remove the stop file which will be located at " .
                    "\${repo-path}/lock/\${stanza}-archive.stop where \${repo-path} is the path set in the general section, and " .
                    "\${stanza} is the backup stanza."
        },

        # ARCHIVE-TIMEOUT Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'archive-timeout' =>
        {
            section => 'general',
            summary =>
                "Archive timeout.",
            description =>
                "Set maximum time, in seconds, to wait for WAL segments to reach the archive. The timeout applies to the check " .
                    "command and to the backup command when waiting for WAL segments required to make the backup consistent to " .
                    "be archived."
        },

        # BACKUP-CMD Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'backup-cmd' =>
        {
            section => 'backup',
            summary =>
                "pgBackRest exe path on the backup host.",
            description =>
                "Required only if the path to pgbackrest is different on the local and backup hosts. If not defined, the backup " .
                    "host exe path will be set the same as the local exe path."
        },

        # BACKUP-CONFIG Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'backup-config' =>
        {
            section => 'backup',
            summary =>
                "pgBackRest backup host configuration file.",
            description =>
                "Sets the location of the configuration file on the backup host. This is only required if the backup host " .
                    "configuration file is in a different location than the local configuration file."
        },

        # BACKUP-HOST Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'backup-host' =>
        {
            section => 'backup',
            summary =>
                "Backup host when operating remotely via SSH.",
            description =>
                "Make sure that trusted SSH authentication is configured between the db host and the backup host.\n" .
                "\n" .
                "When backing up to a locally mounted network filesystem this setting is not required."
        },

        # BACKUP-STANDBY Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'backup-standby' =>
        {
            section => 'backup',
            summary =>
                "Backup from the standby cluster.",
            description =>
                "Enable backup from standby to reduce load on the master cluster. This option requires that both the master and " .
                    "standby hosts be configured."
        },

        # BACKUP-USER Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'backup-user' =>
        {
            section => 'backup',
            summary =>
                "Backup host user when backup-host is set.",
            description =>
                "Defines the user that will be used for operations on the backup server. Preferably this is not the postgres " .
                    "user but rather some other user like backrest. If PostgreSQL runs on the backup server the postgres user " .
                    "can be placed in the backrest group so it has read permissions on the repository without being able to " .
                    "damage the contents accidentally."
        },

        # BUFFER-SIZE Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'buffer-size' =>
        {
            section => 'general',
            summary =>
                "Buffer size for file operations.",
            description =>
                "Set the buffer size used for copy, compress, and uncompress functions. A maximum of 3 buffers will be in use " .
                    "at a time per process. An additional maximum of 256K per process may be used for zlib buffers."
        },

        # CHECKSUM-PAGE Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'checksum-page' =>
        {
            section => 'general',
            summary =>
                "Validate data page checksums.",
            description =>
                "Directs pgBackRest to validate all data page checksums while backing up a cluster. This option will be " .
                    "automatically enabled when the required C library is present and checksums are enabled on the cluster.\n" .
                "\n" .
                "Failures in checksum validation will not abort a backup. Rather, warnings will be emitted in the log (and to " .
                    "the console with default settings) and the list of invalid pages will be stored in the backup manifest."
        },

        # CMD-SSH Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'cmd-ssh' =>
        {
            section => 'general',
            summary =>
                "Path to ssh client executable.",
            description =>
                "Use a specific SSH client when an alternate is desired or the ssh executable is not in \$PATH."
        },

        # COMPRESS Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'compress' =>
        {
            section => 'general',
            summary =>
                "Use gzip file compression.",
            description =>
                "Backup files are compatible with command-line gzip tools."
        },

        # COMPRESS-LEVEL Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'compress-level' =>
        {
            section => 'general',
            summary =>
                "Compression level for stored files.",
            description =>
                "Sets the zlib level to be used for file compression when compress=y."
        },

        # COMPRESS-LEVEL-NETWORK Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'compress-level-network' =>
        {
            section => 'general',
            summary =>
                "Compression level for network transfer when compress=n.",
            description =>
                "Sets the zlib level to be used for protocol compression when compress=n and the database cluster is not on the " .
                    "same host as the backup. Protocol compression is used to reduce network traffic but can be disabled by " .
                    "setting compress-level-network=0. When compress=y the compress-level-network setting is ignored and " .
                    "compress-level is used instead so that the file is only compressed once. SSH compression is always disabled."
        },

        # CONFIG Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'config' =>
        {
            summary =>
                "pgBackRest configuration file.",
            description =>
                "Use this option to specify a different configuration file than the default."
        },

        # DB-CMD Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-cmd' =>
        {
            section => 'stanza',
            summary =>
                "pgBackRest exe path on the database host.",
            description =>
                "Required only if the path to pgbackrest is different on the local and database hosts. If not defined, the " .
                    "database host exe path will be set the same as the local exe path."
        },

        # DB-CONFIG Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-config' =>
        {
            section => 'stanza',
            summary =>
                "pgBackRest database host configuration file.",
            description =>
                "Sets the location of the configuration file on the database host. This is only required if the database host " .
                    "configuration file is in a different location than the local configuration file."
        },

        # DB-HOST Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-host' =>
        {
            section => 'stanza',
            summary =>
                "Cluster host for operating remotely via SSH.",
            description =>
                "Used for backups where the database cluster host is different from the backup host."
        },

        # DB-INCLUDE Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-include' =>
        {
            section => 'restore',
            summary =>
                "Restore only specified databases.",
            description =>
                "This feature allows only selected databases to be restored. Databases not specifically included will be " .
                    "restored as sparse, zeroed files to save space but still allow PostgreSQL to perform recovery. After " .
                    "recovery the databases that were not included will not be accessible but can be removed with the drop " .
                    "database command.\n" .
                "\n" .
                "Note that built-in databases (template0, template1, and postgres) are always restored.\n" .
                "\n" .
                "The --db-include option can be passed multiple times to specify more than one database to include."
        },

        # DB-PATH Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-path' =>
        {
            section => 'stanza',
            summary =>
                "Cluster data directory.",
            description =>
                "This should be the same as the data_directory setting in postgresql.conf. Even though this value can be read " .
                    "from postgresql.conf or the database cluster it is prudent to set it in case those resources are not " .
                    "available during a restore or offline backup scenario.\n" .
                "\n" .
                "The db-path option is tested against the value reported by PostgreSQL on every online backup so it should " .
                    "always be current."
        },

        # DB-PORT Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-port' =>
        {
            section => 'stanza',
            summary =>
                "Cluster port.",
            description =>
                "Port that PostgreSQL is running on. This usually does not need to be specified as most database clusters run " .
                    "on the default port."
        },

        # DB-SOCKET-PATH Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-socket-path' =>
        {
            section => 'stanza',
            summary =>
                "Cluster unix socket path.",
            description =>
                "The unix socket directory that was specified when PostgreSQL was started. pgBackRest will automatically look " .
                    "in the standard location for your OS so there usually no need to specify this setting unless the socket " .
                    "directory was explicitly modified with the unix_socket_directory setting in postgressql.conf."
        },

        # DB-TIMEOUT Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-timeout' =>
        {
            section => 'general',
            summary =>
                "Database query timeout.",
            description =>
                "Sets the timeout, in seconds, for queries against the database. This includes the pg_start_backup() and " .
                    "pg_stop_backup() functions which can each take a substantial amount of time. Because of this the timeout " .
                    "should be kept high unless you know that these functions will return quickly (i.e. if you have set " .
                    "startfast=y and you know that the database cluster will not generate many WAL segments during the backup)."
        },

        # DB-USER Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'db-user' =>
        {
            section => 'stanza',
            summary =>
                "Cluster host logon user when db-host is set.",
            description =>
                "This user will also own the remote pgBackRest process and will initiate connections to PostgreSQL. For this to " .
                    "work correctly the user should be the PostgreSQL database cluster owner which is generally postgres, the " .
                    "default."
        },

        # HARDLINK Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'hardlink' =>
        {
            section => 'backup',
            summary =>
                "Hardlink files between backups.",
            description =>
                "Enable hard-linking of files in differential and incremental backups to their full backups. This gives the " .
                    "appearance that each backup is a full backup. Be careful, though, because modifying files that are " .
                    "hard-linked can affect all the backups in the set."
        },

        # LINK-ALL Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'link-all' =>
        {
            section => 'restore',
            summary =>
                "Restore all symlinks.",
            description =>
                "By default symlinked directories and files are restored as normal directories and files in \$PGDATA. This is " .
                    "because it may not be safe to restore symlinks to their original destinations on a system other than where " .
                    "the original backup was performed. This option restores all the symlinks just as they were on the original " .
                    "system where the backup was performed."
        },

        # LINK-MAP Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'link-map' =>
        {
            section => 'restore',
            summary =>
                "Modify the destination of a symlink.",
            description =>
                "Allows the destination file or path of a symlink to be changed on restore. This is useful for restoring to " .
                    "systems that have a different storage layout than the original system where the backup was generated."
        },

        # LOCK-PATH Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'lock-path' =>
        {
            section => 'general',
            summary =>
                "Path where lock files are stored.",
            description =>
                "The lock path provides a location for pgBackRest to create lock files to prevent conflicting operations from " .
                    "being run concurrently."
        },

        # LOG-LEVEL-CONSOLE Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'log-level-console' =>
        {
            section => 'log',
            summary =>
                "Level for console logging.",
            description =>
                "The following log levels are supported:\n" .
                "\n" .
                "* off - No logging at all (not recommended)\n" .
                "* error - Log only errors\n" .
                "* warn - Log warnings and errors\n" .
                "* info - Log info, warnings, and errors\n" .
                "* detail - Log detail, info, warnings, and errors\n" .
                "* debug - Log debug, detail, info, warnings, and errors\n" .
                "* trace - Log trace (very verbose debugging), debug, info, warnings, and errors"
        },

        # LOG-LEVEL-FILE Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'log-level-file' =>
        {
            section => 'log',
            summary =>
                "Level for file logging.",
            description =>
                "The following log levels are supported:\n" .
                "\n" .
                "* off - No logging at all (not recommended)\n" .
                "* error - Log only errors\n" .
                "* warn - Log warnings and errors\n" .
                "* info - Log info, warnings, and errors\n" .
                "* detail - Log detail, info, warnings, and errors\n" .
                "* debug - Log debug, detail, info, warnings, and errors\n" .
                "* trace - Log trace (very verbose debugging), debug, info, warnings, and errors"
        },

        # LOG-LEVEL-STDERR Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'log-level-stderr' =>
        {
            section => 'log',
            summary =>
                "Level for stderr logging.",
            description =>
                "Specifies which log levels must will be output to stderr rather than stdout (specified by log-level-console). " .
                    "The timestamp and process will not be output to stderr.\n" .
                "\n" .
                "The following log levels are supported:\n" .
                "\n" .
                "* off - No logging at all (not recommended)\n" .
                "* error - Log only errors\n" .
                "* warn - Log warnings and errors\n" .
                "* info - Log info, warnings, and errors\n" .
                "* detail - Log detail, info, warnings, and errors\n" .
                "* debug - Log debug, detail, info, warnings, and errors\n" .
                "* trace - Log trace (very verbose debugging), debug, info, warnings, and errors"
        },

        # LOG-PATH Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'log-path' =>
        {
            section => 'general',
            summary =>
                "Path where log files are stored.",
            description =>
                "The log path provides a location for pgBackRest to store log files. Note that if log-level-file=none then no " .
                    "log path is required."
        },

        # MANIFEST-SAVE-THRESHOLD Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'manifest-save-threshold' =>
        {
            section => 'backup',
            summary =>
                "Manifest save threshold during backup.",
            description =>
                "Defines how often the manifest will be saved during a backup (in bytes). Saving the manifest is important " .
                    "because it stores the checksums and allows the resume function to work efficiently. The actual threshold " .
                    "used is 1% of the backup size or manifest-save-threshold, whichever is greater."
        },

        # NEUTRAL-UMASK Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'neutral-umask' =>
        {
            section => 'general',
            summary =>
                "Use a neutral umask.",
            description =>
                "Sets the umask to 0000 so modes in the repository are created in a sensible way. The default directory mode is " .
                    "0750 and default file mode is 0640. The lock and log directories set the directory and file mode to 0770 " .
                    "and 0660 respectively.\n" .
                "\n" .
                "To use the executing user's umask instead specify neutral-umask=n in the config file or --no-neutral-umask on " .
                    "the command line."
        },

        # ONLINE Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'online' =>
        {
            summary =>
                "Perform an online backup.",
            description =>
                "Specifying --no-online prevents pgBackRest from running pg_start_backup() and pg_stop_backup() on the database " .
                    "cluster. In order for this to work PostgreSQL should be shut down and pgBackRest will generate an error if " .
                    "it is not.\n" .
                "\n" .
                "The purpose of this option is to allow offline backups. The pg_xlog directory is copied as-is and " .
                    "archive-check is automatically disabled for the backup."
        },

        # PROCESS-MAX Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'process-max' =>
        {
            section => 'general',
            summary =>
                "Max processes to use for compress/transfer.",
            description =>
                "Each process will perform compression and transfer to make the command run faster, but don't set process-max " .
                    "so high that it impacts database performance."
        },

        # PROTOCOL-TIMEOUT Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'protocol-timeout' =>
        {
            section => 'general',
            summary =>
                "Protocol timeout.",
            description =>
                "Sets the timeout, in seconds, that the master or remote process will wait for a new message to be received on " .
                    "the protocol layer. This prevents processes from waiting indefinitely for a message. The protocol-timeout " .
                    "option must be greater than the db-timeout option."
        },

        # RECOVERY-OPTION Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'recovery-option' =>
        {
            section => 'restore',
            summary =>
                "Set an option in recovery.conf.",
            description =>
                "See http://www.postgresql.org/docs/X.X/static/recovery-config.html for details on recovery.conf options " .
                    "(replace X.X with your PostgreSQL version). This option can be used multiple times.\n" .
                "\n" .
                "Note: The restore_command option will be automatically generated but can be overridden with this option. Be " .
                    "careful about specifying your own restore_command as pgBackRest is designed to handle this for you. Target " .
                    "Recovery options (recovery_target_name, recovery_target_time, etc.) are generated automatically by " .
                    "pgBackRest and should not be set with this option.\n" .
                "\n" .
                "Since pgBackRest does not start PostgreSQL after writing the recovery.conf file, it is always possible to " .
                    "edit/check recovery.conf before manually restarting."
        },

        # REPO-LINK Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'repo-link' =>
        {
            section => 'general',
            summary =>
                "Create convenience symlinks in repository.",
            description =>
                "Creates the convenience link latest in the stanza directory and internal tablespace symlinks in each backup " .
                    "directory. The internal tablespace symlinks allow clusters to be brought up manually in-place using " .
                    "filesystem snapshots as long as the backup is not compressed.\n" .
                "\n" .
                "This option should be disabled when the repository is located on a filesystem that does not support symlinks. " .
                    "No pgBackRest functionality will be affected, but certain manual operations on the repository may be less " .
                    "convenient."
        },

        # REPO-PATH Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'repo-path' =>
        {
            section => 'general',
            summary =>
                "Repository path where WAL segments and backups stored.",
            description =>
                "The repository is where pgBackRest stores backup and archives WAL segments.\n" .
                "\n" .
                "If you are new to backup then it will be difficult to estimate in advance how much space you'll need. The best " .
                    "thing to do is take some backups then record the size of different types of backups (full/incr/diff) and " .
                    "measure the amount of WAL generated per day. This will give you a general idea of how much space you'll " .
                    "need, though of course requirements will likely change over time as your database evolves."
        },

        # REPO-SYNC Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'repo-sync' =>
        {
            section => 'general',
            summary =>
                "Sync directories in repository.",
            description =>
                "Syncs directories when writing to the repository. Not all file systems support directory syncs (e.g., NTFS) so " .
                    "this option allows them to be disabled."
        },

        # RESUME Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'resume' =>
        {
            section => 'backup',
            summary =>
                "Allow resume of failed backup.",
            description =>
                "Defines whether the resume feature is enabled. Resume can greatly reduce the amount of time required to run a " .
                    "backup after a previous backup of the same type has failed. It adds complexity, however, so it may be " .
                    "desirable to disable in environments that do not require the feature."
        },

        # RETENTION-ARCHIVE Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'retention-archive' =>
        {
            section => 'expire',
            summary =>
                "Number of backups worth of continuous WAL to retain.",
            description =>
                "Note that the WAL segments required to make a backup consistent are always retained until the backup is " .
                    "expired regardless of how this option is configured.\n" .
                "\n" .
                "If this value is not set, then the archive to expire will default to the retention-full (or retention-diff) " .
                    "value corresponding to the retention-archive-type if set to full (or diff). This will ensure that WAL is " .
                    "only expired for backups that are already expired.\n" .
                "\n" .
                "This option must be set if retention-archive-type is set to incr. If disk space is at a premium, then this " .
                    "setting, in conjunction with retention-archive-type, can be used to aggressively expire WAL segments. " .
                    "However, doing so negates the ability to perform PITR from the backups with expired WAL and is therefore " .
                    "not recommended."
        },

        # RETENTION-ARCHIVE-TYPE Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'retention-archive-type' =>
        {
            section => 'expire',
            summary =>
                "Backup type for WAL retention.",
            description =>
                "If set to full pgBackRest will keep archive logs for the number of full backups defined by retention-archive. " .
                    "If set to diff (differential) pgBackRest will keep archive logs for the number of full and differential " .
                    "backups defined by retention-archive, meaning if the last backup taken was a full backup, it will be " .
                    "counted as a differential for the purpose of retention. If set to incr (incremental) pgBackRest will keep " .
                    "archive logs for the number of full, differential, and incremental backups defined by retention-archive. " .
                    "It is recommended that this setting not be changed from the default which will only expire WAL in " .
                    "conjunction with expiring full backups."
        },

        # RETENTION-DIFF Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'retention-diff' =>
        {
            section => 'expire',
            summary =>
                "Number of differential backups to retain.",
            description =>
                "When a differential backup expires, all incremental backups associated with the differential backup will also " .
                    "expire. When not defined all differential backups will be kept until the full backups they depend on expire."
        },

        # RETENTION-FULL Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'retention-full' =>
        {
            section => 'expire',
            summary =>
                "Number of full backups to retain.",
            description =>
                "When a full backup expires, all differential and incremental backups associated with the full backup will also " .
                    "expire. When the option is not defined a warning will be issued. If indefinite retention is desired then " .
                    "set the option to the max value."
        },

        # SPOOL-PATH Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'spool-path' =>
        {
            section => 'general',
            summary =>
                "Path where WAL segments are spooled during async archiving.",
            description =>
                "When asynchronous archiving is enabled pgBackRest needs a local directory to store WAL segments before they " .
                    "are compressed and moved to the repository. Depending on the volume of WAL generated this directory could " .
                    "become very large so be sure to plan accordingly.\n" .
                "\n" .
                "The max-archive-mb option can be used to limit the amount of WAL that will be spooled locally."
        },

        # STANZA Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'stanza' =>
        {
            summary =>
                "Defines a stanza.",
            description =>
                "A stanza is the configuration for a PostgreSQL database cluster that defines where it is located, how it will " .
                    "be backed up, archiving options, etc. Most db servers will only have one Postgres database cluster and " .
                    "therefore one stanza, whereas backup servers will have a stanza for every database cluster that needs to " .
                    "be backed up.\n" .
                "\n" .
                "It is tempting to name the stanza after the primary cluster but a better name describes the databases " .
                    "contained in the cluster. Because the stanza name will be used for the primary and all replicas it is more " .
                    "appropriate to choose a name that describes the actual function of the cluster, such as app or dw, rather " .
                    "than the local cluster name, such as main or prod."
        },

        # START-FAST Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'start-fast' =>
        {
            section => 'backup',
            summary =>
                "Force a checkpoint to start backup quickly.",
            description =>
                "Forces a checkpoint (by passing y to the fast parameter of pg_start_backup()) so the backup begins " .
                    "immediately. Otherwise the backup will start after the next regular checkpoint.\n" .
                "\n" .
                "This feature only works in PostgreSQL >= 8.4."
        },

        # STOP-AUTO Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'stop-auto' =>
        {
            section => 'backup',
            summary =>
                "Stop prior failed backup on new backup.",
            description =>
                "This will only be done if an exclusive advisory lock can be acquired to demonstrate that the prior failed " .
                    "backup process has really stopped.\n" .
                "\n" .
                "This feature relies on pg_is_in_backup() so only works on PostgreSQL >= 9.3.\n" .
                "\n" .
                "The setting is disabled by default because it assumes that pgBackRest is the only process doing exclusive " .
                    "online backups. It depends on an advisory lock that only pgBackRest sets so it may abort other processes " .
                    "that do exclusive online backups. Note that base_backup and pg_dump are safe to use with this setting " .
                    "because they do not call pg_start_backup() so are not exclusive."
        },

        # TABLESPACE-MAP Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'tablespace-map' =>
        {
            section => 'restore',
            summary =>
                "Restore a tablespace into the specified directory.",
            description =>
                "Moves a tablespace to a new location during the restore. This is useful when tablespace locations are not the " .
                    "same on a replica, or an upgraded system has different mount points.\n" .
                "\n" .
                "Since PostgreSQL 9.2 tablespace locations are not stored in pg_tablespace so moving tablespaces can be done " .
                    "with impunity. However, moving a tablespace to the data_directory is not recommended and may cause " .
                    "problems. For more information on moving tablespaces " .
                    "http://www.databasesoup.com/2013/11/moving-tablespaces.html is a good resource."
        },

        # TABLESPACE-MAP-ALL Option Help
        #---------------------------------------------------------------------------------------------------------------------------
        'tablespace-map-all' =>
        {
            section => 'restore',
            summary =>
                "Restore all tablespaces into the specified directory.",
            description =>
                "By default tablespaces are restored into their original locations and while this behavior can be modified by " .
                    "with the tablespace-map open it is sometime preferable to remap all tablespaces to a new directory all at " .
                    "once. This is particularly useful for development or staging systems that may not have the same storage " .
                    "layout as the original system where the backup was generated.\n" .
                "\n" .
                "The path specified will be the parent path used to create all the tablespaces in the backup."
        }
    },

    # Command Help
    #-------------------------------------------------------------------------------------------------------------------------------
    command =>
    {
        # ARCHIVE-GET Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'archive-get' =>
        {
            summary =>
                "Get a WAL segment from the archive.",
            description =>
                "WAL segments are required for restoring a PostgreSQL cluster or maintaining a replica.",

            option =>
            {
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-user' => 'section',
                'buffer-size' => 'section',
                'cmd-ssh' => 'section',
                'compress' => 'section',
                'compress-level' => 'section',
                'compress-level-network' => 'section',
                'config' => 'default',
                'db-path' => 'section',
                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',
                'neutral-umask' => 'section',
                'protocol-timeout' => 'section',
                'repo-path' => 'section',
                'stanza' => 'default'
            }
        },

        # ARCHIVE-PUSH Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'archive-push' =>
        {
            summary =>
                "Push a WAL segment to the archive.",
            description =>
                "The WAL segment may be pushed immediately to the archive or stored locally depending on the value of " .
                    "archive-async",

            option =>
            {
                'archive-async' => 'section',
                'archive-max-mb' => 'section',
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-user' => 'section',
                'buffer-size' => 'section',
                'cmd-ssh' => 'section',
                'compress' => 'section',
                'compress-level' => 'section',
                'compress-level-network' => 'section',
                'config' => 'default',
                'db-path' => 'section',
                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',
                'neutral-umask' => 'section',
                'protocol-timeout' => 'section',
                'repo-path' => 'section',
                'repo-sync' => 'section',
                'spool-path' => 'section',
                'stanza' => 'default'
            }
        },

        # BACKUP Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'backup' =>
        {
            summary =>
                "Backup a database cluster.",
            description =>
                "pgBackRest does not have a built-in scheduler so it's best to run it from cron or some other scheduling " .
                    "mechanism.",

            option =>
            {
                'archive-check' => 'section',
                'archive-copy' => 'section',
                'archive-timeout' => 'section',
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-standby' => 'section',
                'buffer-size' => 'section',
                'checksum-page' => 'section',
                'cmd-ssh' => 'section',
                'compress' => 'section',
                'compress-level' => 'section',
                'compress-level-network' => 'section',
                'config' => 'default',
                'db-cmd' => 'section',
                'db-config' => 'section',
                'db-host' => 'section',
                'db-path' => 'section',
                'db-port' => 'section',
                'db-socket-path' => 'section',
                'db-timeout' => 'section',
                'db-user' => 'section',

                # FORCE Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'force' =>
                {
                    summary =>
                        "Force an offline backup.",
                    description =>
                        "When used with --no-start-stop a backup will be run even if pgBackRest thinks that PostgreSQL is " .
                            "running. This option should be used with extreme care as it will likely result in a bad backup.\n" .
                        "\n" .
                        "There are some scenarios where a backup might still be desirable under these conditions. For example, " .
                            "if a server crashes and the database cluster volume can only be mounted read-only, it would be a " .
                            "good idea to take a backup even if postmaster.pid is present. In this case it would be better to " .
                            "revert to the prior backup and replay WAL, but possibly there is a very important transaction in a " .
                            "WAL segment that did not get archived."
                },

                'hardlink' => 'section',
                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',
                'manifest-save-threshold' => 'section',
                'neutral-umask' => 'section',
                'online' => 'default',
                'process-max' => 'section',
                'protocol-timeout' => 'section',
                'repo-link' => 'section',
                'repo-path' => 'section',
                'repo-sync' => 'section',
                'resume' => 'section',
                'retention-archive' => 'section',
                'retention-archive-type' => 'section',
                'retention-diff' => 'section',
                'retention-full' => 'section',
                'stanza' => 'default',
                'start-fast' => 'section',
                'stop-auto' => 'section',

                # TYPE Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'type' =>
                {
                    summary =>
                        "Backup type.",
                    description =>
                        "The following backup types are supported:\n" .
                        "\n" .
                        "* full - all database cluster files will be copied and there will be no dependencies on previous " .
                            "backups.\n" .
                        "* incr - incremental from the last successful backup.\n" .
                        "* diff - like an incremental backup but always based on the last full backup."
                }
            }
        },

        # CHECK Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'check' =>
        {
            summary =>
                "Check the configuration.",
            description =>
                "The check command validates that pgBackRest and the archive_command setting are configured correctly for " .
                    "archiving and backups. It detects misconfigurations, particularly in archiving, that result in incomplete " .
                    "backups because required WAL segments did not reach the archive. The command can be run on the database or " .
                    "the backup host.\n" .
                "\n" .
                "Note that pg_create_restore_point('pgBackRest Archive Check') and pg_switch_xlog() are called to force " .
                    "PostgreSQL to archive a WAL segment. Restore points are only supported in PostgreSQL >= 9.1 so for older " .
                    "versions the check command may fail if there has been no write activity since the last log rotation.",

            option =>
            {
                'archive-check' => 'section',
                'archive-timeout' => 'section',
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-standby' => 'section',
                'backup-user' => 'section',
                'buffer-size' => 'section',
                'cmd-ssh' => 'section',
                'compress-level' => 'section',
                'compress-level-network' => 'section',
                'config' => 'default',
                'db-cmd' => 'section',
                'db-config' => 'section',
                'db-host' => 'section',
                'db-path' => 'section',
                'db-port' => 'section',
                'db-socket-path' => 'section',
                'db-timeout' => 'section',
                'db-user' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',
                'neutral-umask' => 'section',
                'online' => 'default',
                'protocol-timeout' => 'section',
                'repo-path' => 'section',
                'stanza' => 'default'
            }
        },

        # EXPIRE Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'expire' =>
        {
            summary =>
                "Expire backups that exceed retention.",
            description =>
                "pgBackRest does backup rotation but is not concerned with when the backups were created. If two full backups " .
                    "are configured for retention, pgBackRest will keep two full backups no matter whether they occur two hours " .
                    "or two weeks apart.",

            option =>
            {
                'backup-host' => 'section',
                'cmd-ssh' => 'section',
                'config' => 'default',
                'db-cmd' => 'section',
                'db-config' => 'section',
                'db-host' => 'section',
                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',
                'repo-path' => 'section',
                'retention-archive' => 'section',
                'retention-archive-type' => 'section',
                'retention-diff' => 'section',
                'retention-full' => 'section',
                'stanza' => 'default'
            }
        },

        # HELP Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'help' =>
        {
            summary =>
                "Get help.",
            description =>
                "Three levels of help are provided. If no command is specified then general help will be displayed. If a " .
                    "command is specified then a full description of the command will be displayed along with a list of valid " .
                    "options. If an option is specified in addition to a command then the a full description of the option as " .
                    "it applies to the command will be displayed.",

        },

        # INFO Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'info' =>
        {
            summary =>
                "Retrieve information about backups.",
            description =>
                "The info command operates on a single stanza or all stanzas. Text output is the default and gives a " .
                    "human-readable summary of backups for the stanza(s) requested. This format is subject to change with any " .
                    "release.\n" .
                "\n" .
                "For machine-readable output use --output=json. The JSON output contains far more information than the text " .
                    "output, however this feature is currently experimental so the format may change between versions.",

            option =>
            {
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-user' => 'section',
                'buffer-size' => 'section',
                'cmd-ssh' => 'section',
                'compress-level' => 'section',
                'compress-level-network' => 'section',
                'config' => 'default',
                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',

                # OUTPUT Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'output' =>
                {
                    summary =>
                        "Output format.",
                    description =>
                        "The following output types are supported:\n" .
                        "\n" .
                        "* text - Human-readable summary of backup information.\n" .
                        "* json - Exhaustive machine-readable backup information in JSON format."
                },

                'protocol-timeout' => 'section',
                'repo-path' => 'section',
                'stanza' => 'default'
            }
        },

        # RESTORE Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'restore' =>
        {
            summary =>
                "Restore a database cluster.",
            description =>
                "This command is generally run manually, but there are instances where it might be automated.",

            option =>
            {
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-user' => 'section',
                'buffer-size' => 'section',
                'cmd-ssh' => 'section',
                'compress' => 'section',
                'compress-level' => 'section',
                'compress-level-network' => 'section',
                'config' => 'default',
                'db-include' => 'section',
                'db-path' => 'section',

                # DELTA Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'delta' =>
                {
                    summary =>
                        "Restore using delta.",
                    description =>
                        "By default the PostgreSQL data and tablespace directories are expected to be present but empty. This " .
                            "option performs a delta restore using checksums."
                },

                # FORCE Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'force' =>
                {
                    summary =>
                        "Force a restore.",
                    description =>
                        "By itself this option forces the PostgreSQL data and tablespace paths to be completely overwritten. In " .
                            "combination with --delta a timestamp/size delta will be performed instead of using checksums."
                },

                'link-all' => 'section',
                'link-map' => 'section',

                # LOCK Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'lock' =>
                {
                    summary =>
                        "Create a lock so restores on a stanza cannot run simultaneously.",
                    description =>
                        "Locking during restores is enabled by default but can be disabled using --no-lock. Be very careful " .
                            "when disabling this option because simultaneous restores to a single path might result in a " .
                            "corrupt cluster."
                },

                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',
                'neutral-umask' => 'section',
                'process-max' => 'section',
                'protocol-timeout' => 'section',
                'recovery-option' => 'section',
                'repo-path' => 'section',

                # SET Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'set' =>
                {
                    summary =>
                        "Backup set to restore.",
                    description =>
                        "The backup set to be restored. latest will restore the latest backup, otherwise provide the name of " .
                            "the backup to restore."
                },

                'stanza' => 'default',
                'tablespace-map' => 'section',
                'tablespace-map-all' => 'section',

                # TARGET Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'target' =>
                {
                    summary =>
                        "Recovery target.",
                    description =>
                        "Defines the recovery target when --type is name, xid, or time."
                },

                # TARGET-ACTION Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'target-action' =>
                {
                    summary =>
                        "Action to take when recovery target is reached.",
                    description =>
                        "The following actions are supported:\n" .
                        "\n" .
                        "* pause - pause when recovery target is reached.\n" .
                        "* promote - promote and switch timeline when recovery target is reached.\n" .
                        "* shutdown - shutdown server when recovery target is reached.\n" .
                        "\n" .
                        "This option is only supported on PostgreSQL >= 9.5."
                },

                # TARGET-EXCLUSIVE Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'target-exclusive' =>
                {
                    summary =>
                        "Stop just before the recovery target is reached.",
                    description =>
                        "Defines whether recovery to the target would be exclusive (the default is inclusive) and is only valid " .
                            "when --type is time or xid. For example, using --target-exclusive would exclude the contents of " .
                            "transaction 1007 when --type=xid and --target=1007. See the recovery_target_inclusive option in " .
                            "the PostgreSQL docs for more information."
                },

                # TARGET-TIMELINE Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'target-timeline' =>
                {
                    summary =>
                        "Recover along a timeline.",
                    description =>
                        "See recovery_target_timeline in the PostgreSQL docs for more information."
                },

                # TYPE Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'type' =>
                {
                    summary =>
                        "Recovery type.",
                    description =>
                        "The following recovery types are supported:\n" .
                        "\n" .
                        "* default - recover to the end of the archive stream.\n" .
                        "* immediate - recover only until the database becomes consistent. This option is only supported on " .
                            "PostgreSQL >= 9.4.\n" .
                        "* name - recover the restore point specified in --target.\n" .
                        "* xid - recover to the transaction id specified in --target.\n" .
                        "* time - recover to the time specified in --target.\n" .
                        "* preserve - preserve the existing recovery.conf file.\n" .
                        "* none - no recovery.conf file is written so PostgreSQL will attempt to achieve consistency using WAL " .
                            "segments present in pg_xlog. Provide the required WAL segments or use the archive-copy setting to " .
                            "include them with the backup."
                }
            }
        },

        # STANZA-CREATE Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'stanza-create' =>
        {
            summary =>
                "Create the required stanza data.",
            description =>
                "Must be run during pgBackRest installation on the host where the repository is located. The check command will " .
                    "also be invoked if the PostgreSQL database version is greater than or equal to 9.1.",

            option =>
            {
                'archive-timeout' => 'section',
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-user' => 'section',
                'buffer-size' => 'section',
                'cmd-ssh' => 'section',
                'compress-level' => 'section',
                'compress-level-network' => 'section',
                'config' => 'default',
                'db-cmd' => 'section',
                'db-config' => 'section',
                'db-host' => 'section',
                'db-path' => 'section',
                'db-port' => 'section',
                'db-socket-path' => 'section',
                'db-timeout' => 'section',
                'db-user' => 'section',
                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-path' => 'section',
                'neutral-umask' => 'section',
                'protocol-timeout' => 'section',
                'repo-path' => 'section',
                'repo-sync' => 'section',
                'stanza' => 'default'
            }
        },

        # START Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'start' =>
        {
            summary =>
                "Allow pgBackRest processes to run.",
            description =>
                "If the pgBackRest processes were previously stopped using the stop command then they can be started again " .
                    "using the start command. Note that this will not immediately start up any pgBackRest processes but they " .
                    "are allowed to run.",

            option =>
            {
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-user' => 'section',
                'cmd-ssh' => 'section',
                'config' => 'default',
                'db-cmd' => 'section',
                'db-config' => 'section',
                'db-host' => 'section',
                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',
                'repo-path' => 'section',
                'stanza' => 'default'
            }
        },

        # STOP Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'stop' =>
        {
            summary =>
                "Stop pgBackRest processes from running.",
            description =>
                "Does not allow any new pgBackRest processes to run. By default running processes will be allowed to complete " .
                    "successfully. Use the --force option to terminate running processes.\n" .
                "\n" .
                "pgBackRest processes will return an error if they are run after the stop command completes.",

            option =>
            {
                'backup-cmd' => 'section',
                'backup-config' => 'section',
                'backup-host' => 'section',
                'backup-user' => 'section',
                'cmd-ssh' => 'section',
                'config' => 'default',
                'db-cmd' => 'section',
                'db-config' => 'section',
                'db-host' => 'section',

                # FORCE Option Help
                #-------------------------------------------------------------------------------------------------------------------
                'force' =>
                {
                    summary =>
                        "Force all pgBackRest processes to stop.",
                    description =>
                        "This option will send TERM signals to all running pgBackRest processes to effect a graceful but " .
                            "immediate shutdown. Note that this will also shutdown processes that were initiated on another " .
                            "system but have remotes running on the current system. For instance, if a backup was started on " .
                            "the backup server then running stop --force on the database server will shutdown the backup " .
                            "process on the backup server."
                },

                'lock-path' => 'section',
                'log-level-console' => 'section',
                'log-level-file' => 'section',
                'log-level-stderr' => 'section',
                'log-path' => 'section',
                'repo-path' => 'section',
                'stanza' => 'default'
            }
        },

        # VERSION Command Help
        #---------------------------------------------------------------------------------------------------------------------------
        'version' =>
        {
            summary =>
                "Get version.",
            description =>
                "Displays installed pgBackRest version.",

        }
    }
};

####################################################################################################################################
# configHelpDataGet
####################################################################################################################################
sub configHelpDataGet
{
    return $oConfigHelpData;
}

push @EXPORT, qw(configHelpDataGet);

1;