Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
PG_BASEBACKUP(1)	  PostgreSQL 18.6 Documentation 	PG_BASEBACKUP(1)

NAME
     pg_basebackup - take a base backup of a PostgreSQL cluster

SYNOPSIS
     pg_basebackup [option...]

DESCRIPTION
     pg_basebackup  is	used to take a base backup of a running PostgreSQL data-
     base cluster. The backup is taken without affecting other	clients  of  the
     database,	and  can  be  used  both  for  point-in-time  recovery (see Sec-
     tion 25.3) and as the starting point for a log-shipping or streaming-repli-
     cation standby server (see Section 26.2).

     pg_basebackup can take a full or incremental base backup of  the  database.
     When  used  to  take  a full backup, it makes an exact copy of the database
     cluster's files. When used to take an incremental backup, some  files  that
     would have been part of a full backup may be replaced with incremental ver-
     sions  of the same files, containing only those blocks that have been modi-
     fied since the reference backup. An incremental backup cannot be  used  di-
     rectly;  instead, pg_combinebackup(1) must first be used to combine it with
     the previous backups upon which it depends. See Section 25.3.3 for more in-
     formation about incremental backups, and Section 25.3.5 for  steps  to  re-
     cover from a backup.

     In  any  mode,  pg_basebackup  makes sure the server is put into and out of
     backup mode automatically. Backups are always taken of the entire	database
     cluster; it is not possible to back up individual databases or database ob-
     jects. For selective backups, another tool such as pg_dump(1) must be used.

     The  backup  is  made  over  a  regular PostgreSQL connection that uses the
     replication protocol. The connection must be made with a user ID  that  has
     REPLICATION   permissions	 (see  Section 21.2)  or  is  a  superuser,  and
     pg_hba.conf must permit the replication connection. The server must also be
     configured with max_wal_senders set high enough to  provide  at  least  one
     walsender for the backup plus one for WAL streaming (if used).

     There  can  be  multiple pg_basebackups running at the same time, but it is
     usually better from a performance point of view to take  only  one  backup,
     and copy the result.

     pg_basebackup  can  make  a  base backup from not only a primary server but
     also a standby. To take a backup from a standby, set up the standby so that
     it can accept replication connections (that  is,  set  max_wal_senders  and
     hot_standby,  and	configure  its pg_hba.conf appropriately). You will also
     need to enable full_page_writes on the primary.

     Note that there are some limitations in taking a backup from a standby:

     *	 The backup history file is not created in the database  cluster  backed
	 up.

     *	 pg_basebackup	cannot	force the standby to switch to a new WAL file at
	 the end of backup. When you are using -X none, if write activity on the
	 primary is low, pg_basebackup may need to wait a long time for the last
	 WAL file required for the backup to be switched and archived.	In  this
	 case,	it may be useful to run pg_switch_wal on the primary in order to
	 trigger an immediate WAL file switch.

     *	 If the standby is promoted to be  primary  during  backup,  the  backup
	 fails.

     *	 All  WAL  records  required  for  the	backup	must  contain sufficient
	 full-page writes, which requires you to enable full_page_writes on  the
	 primary.

     Whenever	pg_basebackup	is   taking   a   base	 backup,   the	server's
     pg_stat_progress_basebackup view will report the progress	of  the  backup.
     See Section 27.4.6 for details.

OPTIONS
     The  following  command-line options control the location and format of the
     output:

     -D directory
     --pgdata=directory
	 Sets the target directory to write the output to.   pg_basebackup  will
	 create  this  directory (and any missing parent directories) if it does
	 not exist. If it already exists, it must be empty.

	 When the backup is in tar format, the target directory may be specified
	 as - (dash), causing the tar file to be written to stdout.

	 This option is required.

     -F format
     --format=format
	 Selects the format for the output.  format can be one of the following:

	 p
	 plain
	     Write the output as plain files, with the same layout as the source
	     server's data directory and tablespaces. When the	cluster  has  no
	     additional  tablespaces,  the  whole database will be placed in the
	     target directory. If the cluster contains	additional  tablespaces,
	     the main data directory will be placed in the target directory, but
	     all  other  tablespaces will be placed in the same absolute path as
	     they have on the source server. (See --tablespace-mapping to change
	     that.)

	     This is the default format.

	 t
	 tar
	     Write the output as tar files in the  target  directory.  The  main
	     data directory's contents will be written to a file named base.tar,
	     and  each	other  tablespace will be written to a separate tar file
	     named after that tablespace's OID.

	     If the target directory is specified as - (dash), the tar	contents
	     will be written to standard output, suitable for piping to (for ex-
	     ample)  gzip. This is only allowed if the cluster has no additional
	     tablespaces and WAL streaming is not used.

     -i old_manifest_file
     --incremental=old_manifest_file
	 Performs an incremental backup. The backup manifest for  the  reference
	 backup must be provided, and will be uploaded to the server, which will
	 respond by sending the requested incremental backup.

     -R
     --write-recovery-conf
	 Creates a standby.signal

	 file  and  appends connection settings to the postgresql.auto.conf file
	 in the target directory (or within the base archive file when using tar
	 format). This eases setting up a standby server using	the  results  of
	 the backup.

	 The  postgresql.auto.conf file will record the connection settings and,
	 if specified, the replication slot that pg_basebackup is using, so that
	 streaming replication and logical replication slot synchronization will
	 use the same settings later on. The dbname will be recorded only if the
	 dbname was specified explicitly in the connection string or environment
	 variable.

     -t target
     --target=target
	 Instructs the server where to place the base backup. The default target
	 is client, which specifies that the backup should be sent  to	the  ma-
	 chine	where  pg_basebackup is running. If the target is instead set to
	 server:/some/path, the backup will be stored on the machine  where  the
	 server  is running in the /some/path directory. Storing a backup on the
	 server requires  superuser  privileges  or  having  privileges  of  the
	 pg_write_server_files role. If the target is set to blackhole, the con-
	 tents	are  discarded and not stored anywhere. This should only be used
	 for testing purposes, as you will not end up with an actual backup.

	 Since WAL streaming is implemented by pg_basebackup rather than by  the
	 server,  this	option cannot be used together with -Xstream. Since that
	 is the default, when this option is specified, you  must  also  specify
	 either -Xfetch or -Xnone.

     -T olddir=newdir
     --tablespace-mapping=olddir=newdir
	 Relocates  the  tablespace  in  directory  olddir  to newdir during the
	 backup. To be effective, olddir must exactly match the path  specifica-
	 tion  of  the tablespace as it is defined on the source server. (But it
	 is not an error if there is no  tablespace  in  olddir  on  the  source
	 server.)  Meanwhile  newdir  is  a  directory	in  the receiving host's
	 filesystem. As with the main target directory, newdir	need  not  exist
	 already,  but if it does exist it must be empty. Both olddir and newdir
	 must be absolute paths. If either path needs to contain an  equal  sign
	 (=), precede that with a backslash. This option can be specified multi-
	 ple times for multiple tablespaces.

	 If a tablespace is relocated in this way, the symbolic links inside the
	 main  data  directory	are updated to point to the new location. So the
	 new data directory is ready to be used for a new server  instance  with
	 all tablespaces in the updated locations.

	 Currently,  this  option only works with plain output format; it is ig-
	 nored if tar format is selected.

     --waldir=waldir
	 Sets the directory to write WAL (write-ahead log) files to. By  default
	 WAL  files  will be placed in the pg_wal subdirectory of the target di-
	 rectory, but this option can be used to place them  elsewhere.   waldir
	 must  be  an  absolute  path. As with the main target directory, waldir
	 need not exist already, but if it does exist it must be empty. This op-
	 tion can only be specified when the backup is in plain format.

     -X method
     --wal-method=method
	 Includes the required WAL (write-ahead log) files in the  backup.  This
	 will  include	all write-ahead logs generated during the backup. Unless
	 the method none is specified, it is possible to start a  postmaster  in
	 the  target directory without the need to consult the WAL archive, thus
	 making the output a completely standalone backup.

	 The following methods for collecting  the  write-ahead  logs  are  sup-
	 ported:

	 n
	 none
	     Don't include write-ahead logs in the backup.

	 f
	 fetch
	     The  write-ahead  log files are collected at the end of the backup.
	     Therefore, it is necessary for the  source  server's  wal_keep_size
	     parameter	to  be set high enough that the required log data is not
	     removed before the end of the backup. If the required log data  has
	     been recycled before it's time to transfer it, the backup will fail
	     and be unusable.

	     When tar format is used, the write-ahead log files will be included
	     in the base.tar file.

	 s
	 stream
	     Stream  write-ahead  log data while the backup is being taken. This
	     method will open a  second  connection  to  the  server  and  start
	     streaming the write-ahead log in parallel while running the backup.
	     Therefore,  it  will  require  two replication connections not just
	     one. As long as the client can keep up  with  the	write-ahead  log
	     data,  using  this  method requires no extra write-ahead logs to be
	     saved on the source server.

	     When tar format is used, the write-ahead log files will be  written
	     to  a  separate  file  named pg_wal.tar (if the server is a version
	     earlier than 10, the file will be named pg_xlog.tar).

	     This value is the default.

     -z
     --gzip
	 Enables gzip compression of tar file output, with the default	compres-
	 sion  level.  Compression  is only available when using the tar format,
	 and the suffix .gz will automatically be added to all tar filenames.

     -Z level
     -Z [{client|server}-]method[:detail]
     --compress=level
     --compress=[{client|server}-]method[:detail]
	 Requests compression of the backup. If client or server is included, it
	 specifies where the compression is to be performed. Compressing on  the
	 server will reduce transfer bandwidth but will increase server CPU con-
	 sumption.  The  default is client except when --target is used. In that
	 case, the backup is not being sent to the client, so only  server  com-
	 pression  is  sensible.  When	-Xstream, which is the default, is used,
	 server-side compression will not be applied to the WAL. To compress the
	 WAL, use client-side compression, or specify -Xfetch.

	 The compression method can be set to gzip, lz4, zstd, none for no  com-
	 pression or an integer (no compression if 0, gzip if greater than 0). A
	 compression  detail  string  can optionally be specified. If the detail
	 string is an integer, it specifies the compression level. Otherwise, it
	 should be a comma-separated list of items, each of the form keyword  or
	 keyword=value.  Currently,  the supported keywords are level, long, and
	 workers. The detail string cannot be used when the  compression  method
	 is specified as a plain integer.

	 If  no  compression  level  is specified, the default compression level
	 will be used. If only a level is specified without mentioning an  algo-
	 rithm,  gzip  compression  will be used if the level is greater than 0,
	 and no compression will be used if the level is 0.

	 When the tar format is used with gzip, lz4, or zstd,  the  suffix  .gz,
	 .lz4,	or  .zst,  respectively,  will be automatically added to all tar
	 filenames. When the plain format is used, client-side	compression  may
	 not  be specified, but it is still possible to request server-side com-
	 pression. If this is done, the server	will  compress	the  backup  for
	 transmission, and the client will decompress and extract it.

	 When  this option is used in combination with -Xstream, pg_wal.tar will
	 be compressed using gzip if client-side gzip compression  is  selected,
	 but  will  not  be compressed if any other compression algorithm is se-
	 lected, or if server-side compression is selected.

     The following command-line options control the generation of the backup and
     the invocation of the program:

     -c {fast|spread}
     --checkpoint={fast|spread}
	 Sets checkpoint mode to fast (immediate) or spread (the  default)  (see
	 Section 25.3.4).

     -C
     --create-slot
	 Specifies  that  the replication slot named by the --slot option should
	 be created before starting the backup. An error is raised if  the  slot
	 already exists.

     -l label
     --label=label
	 Sets the label for the backup. If none is specified, a default value of
	 "pg_basebackup base backup" will be used.

     -n
     --no-clean
	 By default, when pg_basebackup aborts with an error, it removes any di-
	 rectories  it might have created before discovering that it cannot fin-
	 ish the job (for example, the target directory and write-ahead log  di-
	 rectory). This option inhibits tidying-up and is thus useful for debug-
	 ging.

	 Note that tablespace directories are not cleaned up either way.

     -N
     --no-sync
	 By  default, pg_basebackup will wait for all files to be written safely
	 to disk. This option causes pg_basebackup to  return  without	waiting,
	 which is faster, but means that a subsequent operating system crash can
	 leave	the  base  backup  corrupt. Generally, this option is useful for
	 testing but should not be used when creating a production installation.

     -P
     --progress
	 Enables progress reporting. Turning this on will deliver an approximate
	 progress report during the backup. Since the database may change during
	 the backup, this is only an approximation and may not	end  at  exactly
	 100%.	In particular, when WAL log is included in the backup, the total
	 amount of data cannot be estimated in advance, and in this case the es-
	 timated target size will increase once it  passes  the  total	estimate
	 without WAL.

     -r rate
     --max-rate=rate
	 Sets  the  maximum  transfer  rate  at which data is collected from the
	 source server. This can be useful to limit the impact of  pg_basebackup
	 on the server. Values are in kilobytes per second. Use a suffix of M to
	 indicate  megabytes per second. A suffix of k is also accepted, and has
	 no effect. Valid values are between 32 kilobytes per  second  and  1024
	 megabytes per second.

	 This  option always affects transfer of the data directory. Transfer of
	 WAL files is only affected if the collection method is fetch.

     -S slotname
     --slot=slotname
	 This option can only be used together with -X	stream.  It  causes  WAL
	 streaming  to use the specified replication slot. If the base backup is
	 intended to be used as a streaming-replication standby using a replica-
	 tion slot, the standby should then use the same replication  slot  name
	 as primary_slot_name. This ensures that the primary server does not re-
	 move  any  necessary  WAL  data in the time between the end of the base
	 backup and the start of streaming replication on the new standby.

	 The specified replication slot has to exist unless  the  option  -C  is
	 also used.

	 If  this  option  is  not  specified  and the server supports temporary
	 replication slots (version 10 and later), then a temporary  replication
	 slot is automatically used for WAL streaming.

     --sync-method=method
	 When set to fsync, which is the default, pg_basebackup will recursively
	 open  and synchronize all files in the backup directory. When the plain
	 format is used, the search for files will follow symbolic links for the
	 WAL directory and each configured tablespace.

	 On Linux, syncfs may be used instead to ask  the  operating  system  to
	 synchronize  the  whole file system that contains the backup directory.
	 When the plain format is used, pg_basebackup will also synchronize  the
	 file systems that contain the WAL files and each tablespace. See recov-
	 ery_init_sync_method  for  information about the caveats to be aware of
	 when using syncfs.

	 This option has no effect when --no-sync is used.

     -v
     --verbose
	 Enables verbose mode. Will output some extra steps during  startup  and
	 shutdown,  as	well as show the exact file name that is currently being
	 processed if progress reporting is also enabled.

     --manifest-checksums=algorithm
	 Specifies the checksum algorithm that should be applied  to  each  file
	 included  in  the  backup manifest. Currently, the available algorithms
	 are NONE, CRC32C, SHA224, SHA256, SHA384, and SHA512.	The  default  is
	 CRC32C.

	 If  NONE  is  selected, the backup manifest will not contain any check-
	 sums. Otherwise, it will contain a checksum of each file in the  backup
	 using	the  specified	algorithm. In addition, the manifest will always
	 contain a SHA256 checksum of its own contents. The SHA  algorithms  are
	 significantly	more CPU-intensive than CRC32C, so selecting one of them
	 may increase the time required to complete the backup.

	 Using a SHA hash function provides a cryptographically secure digest of
	 each file for users who wish to verify that the  backup  has  not  been
	 tampered  with, while the CRC-32C algorithm provides a checksum that is
	 much faster to calculate; it is good at catching errors due to acciden-
	 tal changes but is not resistant to malicious modifications. Note that,
	 to be useful against an adversary who has access  to  the  backup,  the
	 backup manifest would need to be stored securely elsewhere or otherwise
	 verified not to have been modified since the backup was taken.

	 pg_verifybackup(1)  can  be  used  to	check  the integrity of a backup
	 against the backup manifest.

     --manifest-force-encode
	 Forces all filenames in the backup manifest to be hex-encoded. If  this
	 option  is not specified, only non-UTF8 filenames are hex-encoded. This
	 option is mostly intended to test that tools which read a backup  mani-
	 fest file properly handle this case.

     --no-estimate-size
	 Prevents  the	server	from  estimating the total amount of backup data
	 that will be streamed, resulting in  the  backup_total  column  in  the
	 pg_stat_progress_basebackup view always being NULL.

	 Without  this	option, the backup will start by enumerating the size of
	 the entire database, and then go back and  send  the  actual  contents.
	 This  may  make  the  backup take slightly longer, and in particular it
	 will take longer before the first data is sent. This option  is  useful
	 to avoid such estimation time if it's too long.

	 This option is not allowed when using --progress.

     --no-manifest
	 Disables  generation of a backup manifest. If this option is not speci-
	 fied, the server will generate and send a backup manifest which can  be
	 verified using pg_verifybackup(1). The manifest is a list of every file
	 present  in  the backup with the exception of any WAL files that may be
	 included. It also stores the size, last modification time, and  an  op-
	 tional checksum for each file.

     --no-slot
	 Prevents the creation of a temporary replication slot for the backup.

	 By default, if log streaming is selected but no slot name is given with
	 the  -S  option,  then a temporary replication slot is created (if sup-
	 ported by the source server).

	 The main purpose of this option is to allow taking a base  backup  when
	 the  server  has no free replication slots. Using a replication slot is
	 almost always preferred, because it prevents needed WAL from being  re-
	 moved by the server during the backup.

     --no-verify-checksums
	 Disables  verification  of checksums, if they are enabled on the server
	 the base backup is taken from.

	 By default, checksums are verified and checksum failures will result in
	 a non-zero exit status. However, the base backup will not be removed in
	 such a case, as if the --no-clean option had been used. Checksum  veri-
	 fication failures will also be reported in the pg_stat_database view.

     The  following  command-line  options  control the connection to the source
     server:

     -d connstr
     --dbname=connstr
	 Specifies parameters used to connect to the  server,  as  a  connection
	 string; these will override any conflicting command line options.

	 This option is called --dbname for consistency with other client appli-
	 cations,  but	because  pg_basebackup doesn't connect to any particular
	 database in the cluster, any database name included in  the  connection
	 string will be ignored by the server. However, a database name supplied
	 that way overrides the default database name (replication) for purposes
	 of looking up the replication connection's password in ~/.pgpass. Simi-
	 larly,  middleware  or  proxies  used in connecting to PostgreSQL might
	 utilize the name for purposes such as connection routing. The	database
	 name can also be used by logical replication slot synchronization.

     -h host
     --host=host
	 Specifies  the host name of the machine on which the server is running.
	 If the value begins with a slash, it is used as  the  directory  for  a
	 Unix  domain  socket.	The default is taken from the PGHOST environment
	 variable, if set, else a Unix domain socket connection is attempted.

     -p port
     --port=port
	 Specifies the TCP port or local Unix domain socket  file  extension  on
	 which	the  server is listening for connections. Defaults to the PGPORT
	 environment variable, if set, or a compiled-in default.

     -s interval
     --status-interval=interval
	 Specifies the number of seconds between status packets sent back to the
	 source server. Smaller values allow more accurate monitoring of  backup
	 progress  from the server. A value of zero disables periodic status up-
	 dates completely, although an update will still be sent when  requested
	 by the server, to avoid timeout-based disconnects. The default value is
	 10 seconds.

     -U username
     --username=username
	 Specifies the user name to connect as.

     -w
     --no-password
	 Prevents issuing a password prompt. If the server requires password au-
	 thentication  and  a password is not available by other means such as a
	 .pgpass file, the connection attempt will fail. This option can be use-
	 ful in batch jobs and scripts where no user is present to enter a pass-
	 word.

     -W
     --password
	 Forces pg_basebackup to prompt for a password before connecting to  the
	 source server.

	 This  option is never essential, since pg_basebackup will automatically
	 prompt for a password if the server  demands  password  authentication.
	 However, pg_basebackup will waste a connection attempt finding out that
	 the  server  wants  a	password. In some cases it is worth typing -W to
	 avoid the extra connection attempt.

     Other options are also available:

     -V
     --version
	 Prints the pg_basebackup version and exits.

     -?
     --help
	 Shows help about pg_basebackup command line arguments, and exits.

ENVIRONMENT
     This utility, like most other PostgreSQL utilities,  uses	the  environment
     variables supported by libpq (see Section 32.15).

     The  environment  variable PG_COLOR specifies whether to use color in diag-
     nostic messages. Possible values are always, auto and never.

NOTES
     At the beginning of the backup, a checkpoint needs to be performed  on  the
     source  server.  This can take some time (especially if the option --check-
     point=fast is not used), during which pg_basebackup will appear to be idle.

     The backup will include all files in the data  directory  and  tablespaces,
     including	the  configuration  files and any additional files placed in the
     directory by third parties, except certain temporary files managed by Post-
     greSQL and operating system files. But only regular files	and  directories
     are  copied, except that symbolic links used for tablespaces are preserved.
     Symbolic links pointing to certain  directories  known  to  PostgreSQL  are
     copied  as empty directories. Other symbolic links and special device files
     are skipped. See Section 54.4 for the precise details.

     In plain format, tablespaces will be backed up to the same path  they  have
     on the source server, unless the option --tablespace-mapping is used. With-
     out this option, running a plain format base backup on the same host as the
     server  will  not	work if tablespaces are in use, because the backup would
     have to be written to the same directory locations as the	original  table-
     spaces.

     When tar format is used, it is the user's responsibility to unpack each tar
     file  before  starting a PostgreSQL server that uses the data. If there are
     additional tablespaces, the tar files for them need to be unpacked  in  the
     correct  locations.  In  this case the symbolic links for those tablespaces
     will be created by the server according  to  the  contents  of  the  table-
     space_map file that is included in the base.tar file.

     pg_basebackup  works  with servers of the same or older major version, down
     to 9.1. However, WAL streaming mode (-X stream) only works with server ver-
     sion 9.3 and later, the tar format (--format=tar) only  works  with  server
     version  9.5  and	later, and incremental backup (--incremental) only works
     with server version 17 and later.

     pg_basebackup will preserve group permissions for data files if group  per-
     missions are enabled on the source cluster.

EXAMPLES
     To create a base backup of the server at mydbserver and store it in the lo-
     cal directory /usr/local/pgsql/data:

	 $ pg_basebackup -h mydbserver -D /usr/local/pgsql/data

     To  create  a  backup  of the local server with one compressed tar file for
     each tablespace, and store it in the directory backup, showing  a	progress
     report while running:

	 $ pg_basebackup -D backup -Ft -z -P

     To  create a backup of a single-tablespace local database and compress this
     with bzip2:

	 $ pg_basebackup -D - -Ft -X fetch | bzip2 > backup.tar.bz2

     (This command will fail if there are multiple tablespaces in the database.)

     To create a backup of a local database where the tablespace in  /opt/ts  is
     relocated to ./backup/ts:

	 $ pg_basebackup -D backup/data -T /opt/ts=$(pwd)/backup/ts

     To  create  a  backup of the local server with one tar file for each table-
     space compressed with gzip at level 9, stored in the directory backup:

	 $ pg_basebackup -D backup -Ft --compress=gzip:9

SEE ALSO
     pg_dump(1), Section 27.4.6

PostgreSQL 18.6 		      2026			PG_BASEBACKUP(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=pg_basebackup&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help