6 Temmuz 2020 Pazartesi

pg_dump komutu

Giriş
Yedek alır. Alınan yedek pg_restore komutu veya psql komutu ile geri yüklenebilir. Açıklaması şöyle.
pg_dump is a regular PostgreSQL client application. This means that you can do this backup procedure from any remote host that has access to the database. pg_dump does not operate with special permissions. In particular, it must have read access to all tables that you want to back up, so in practice, you almost always have to run it as a database superuser.

Dumps created by pg_dump are internally consistent, that is, the dump represents a snapshot of the database as of the time pg_dump begins running. pg_dump does not block other operations on the database while it is working. (Exceptions with an exclusive lock, such as most forms of ALTER TABLE.)
Kullanıcı Bilgileri
pg_dump kullanıcı bilgilerini kaydetmez. Dolayısıyla "create user ..." komutlarını içermez. Açıklaması şöyle
pg_dump can not do that, because pg_dump only dumps a single database and that information is not part of one database, but stored globally in the Postgres "cluster".

You need to use pg_dumpall for that, using the --globals-only option:
Söz Dizimi
Şeklen şöyle. En sona veri tabanı ismi gelmeli. Bu komut çıktıyı ekrana verir. Dolayısıyla dosya yönlendirme ile birlikte kullanılmalı.
pg_dump [OPTION]... [DBNAME]
Mantıken
pd_dump "Bağlantı Seçenekleri" + "Çıktı Seçenekleri" şeklinde kullanılıyor.

Benim Kullandıklarım
Örnek
Şöyle yaptım. Şifre girmeye gerek kalmadı.
pg_dump.exe --dbname=postgresql://myuser:mypassword@myserver:5432/mydb -F c
 -f mybackup
Açıklaması şöyle.
For a one-liner, like migrating a database you can use --dbname followed by a connection string (including the password) as stated in the pg_dump manual

In essence.

pg_dump --dbname=postgresql://username:password@127.0.0.1:5432/mydatabase

Note: Make sure that you use the option --dbname instead of the shorter -d and use a valid URI prefix, postgresql:// or postgres://.
Veri Tabanı İçin
Örnek
Şöyle yaparız. -Fc ile TestDB veri tabanının custom formatta yedeği alınıyor.
[root@blt ~]# su - postgres
[postgres@blt ~]$ pg_dump -Fc TestDB> TestDB.dump
Tablo İçin
Örnek
Şöyle yaparız. -Fc ile postgres veri tabanının t1 tablosunun custom formatta yedeği alınıyor.
[root@blt ~]# su - postgres
[postgres@blt ~]$ pg_dump -Fc — data-only -W -dpostgres -tt1 > t1.dump
1. Bağlantı Seçenekleri
-d seçeneği - database
Şöyle yaparız
$ pg_dump -h $host -U $user -d $db -a -W --format=p >> dump.sql
Şöyle yaparız
# backup
pg_dump -U [username] -d [database] > backup.sql

# restore
psql -U [username] -d [database] < backup.sql
-h seçeneği - host

Açıklaması şöyle. Bağlanılacak sunucunun adresini belirtir.
database server host or socket directory
-p seçeneği
Bağlanılacak sunucunun port numarasını belirtir.

-U seçeneği
user anlamına gelir. Açıklaması şöyle.
connect as specified database user
Şöyle yaparız.
pg_dump -U tad -h localhost -p 5932 -F c -b -v -f /home/dump26072018.dmp openbravo
-w seçeneği
Açıklaması şöyle.
-w

--no-password

Never issue a password prompt. If the server requires password authentication and a password is not available by other means such as a .pgpass file, the connection attempt will fail. This option can be useful in batch jobs and scripts where no user is present to enter a password.

-W seçeneği
Örnek ver

2. General Options
-f seçeneği
Çıktı dosyasının ismini belirtir.
Örnek
Şöyle yaparız
#backup
pg_dump -U admin -d company -f company_backup.sql

#restore
psql -d new_company -f company_backup.sql
Örnek
Şöyle yaparız
# Export Data Only
pg_dump -U admin -d company -f company_backup.sql --data-only

#restore
psql -d new_company -f company_backup.sql
Örnek
Şöyle yaparız
# Include Only Some Schemas:
pg_dump -U admin -d company -n 'p*' -f company_backup.sql

#restore
psql -d new_company -f company_backup.sql

-F seçeneği
Kullanılacak format'ı belirtir. 4 format  tipi var.

1. custom format
Bu format sadece pg_restore komutu ile geri yüklenebilir. Açıklaması şöyle.
c custom Output a custom-format archive suitable for input into pg_restore. Together with the directory output format, this is the most flexible output format in that it allows manual selection and reordering of archived items during restore. This format is also compressed by default.
Örnek
Şöyle yaparız
$ pg_dump \
  -F c \
  -f /var/lib/postgresql/data/2023-04-01-custom.dump \
  -U mypostgresqldumpplanet \
  myjhipsterplanet

2. plain format
Bu format sadece pg_sql komutu ile geri yüklenebilir.
Örnek
plain format için şöyle yaparız.
pg_dump -h remote_address -U username -D dbname -Fp > backup.sql
3. directory format
Bu format sadece pg_restore komutu ile geri yüklenebilir. Belirtilen dizinde her tablo için bir dosya yaratır
Örnek
Şöyle yaparız 
-j ile thread sayısı belirtilir. 
-Fd ile directory format belirtilir.
--quote-all-identifiers ile tüm dosya ve sütün isimleri quote içine alınır
-f ile dizin ismi belirtilir
--blobs nedir bilmiyorum
pg_dump -j 4 -Fd --quote-all-identifiers --compress=0 -f $SCHEMA --blobs

pg_restore -j 4 -d $DATABASE $SCHEMA
Örnek
Şöyle yaparız
$ pg_dump \
  -F d \
  -U mypostgresqldumpplanet \
  myjhipsterplanet > /var/lib/postgresql/data/2023-04-01-directory/
Örnek
Şöyle yaparız
# Produces a company_backup folder with .dat.gz files.
pg_dump -U admin -d company -F d -f company_backup

4. tar format
Bu format sadece pg_restore komutu ile geri yüklenebilir. "-F t" ile tar formatı belirtilir

Örnek
Şöyle yaparız
pg_dump -d postgres -t customer -F t  > /tmp/customer.tar

pg_restore -d postgres -t customer /tmp/customer.tar
Örnek
Şöyle yaparız
$ pg_dump \
  -F t\
  -f /var/lib/postgresql/data/2023-04-01-tar.tar \
  -U mypostgresqldumpplanet \
  myjhipsterplanet
-j seçeneği
Örnek ver

--v seçeneği
Örnek ver

--V seçeneği
Örnek ver

--Z seçeneği
Örnek ver

--lock-wait-time seçeneği
Örnek ver

--no-sync seçeneği
Örnek ver

2. Options Controlling Output Content
-a seçeneği
Örnek ver

-b seçeneği
Örnek ver

-B seçeneği
Örnek ver

-c seçeneği
Örnek ver

-C seçeneği
Açıklaması şöyle. Copy şeklinde satır verisini içeren sql cümleleri oluşturur.
include commands to create database in dump
Copy komutunun açıklaması şöyle
Use COPY to load all the rows in one command, instead of using a series of INSERT commands. The COPY command is optimized for loading large numbers of rows; it is less flexible than INSERT, but incurs significantly less overhead for large data loads. Since COPY is a single command, there is no need to disable autocommit if you use this method to populate a table.
Örnek
İki farklı makine arasında veri tabanı kopyalamak istersek şöyle yaparız. Bu veri tabanı altındaki tüm schemaları kopyalar
pg_dump -C -h localhost -U postgres mydatabase| psql -h remote 
  -U postgres mydatabase
-E seçeneği
Örnek ver

-n seçeneği veya  --schema=SCHEMA
Açıklaması şöyle.
dump the named schema(s) only
Örnek
Şöyle yaparız
# Include Only Some Schemas:
pg_dump -U admin -d company -n 'p*' -f company_backup.sql

#restore
psql -d new_company -f company_backup.sql
-N seçeneği

Örnek ver

-o seçeneği
Açıklaması şöyle.
If your database schema relies on OIDs (for instance as foreign keys), you must instruct pg_dump to dump the OIDs as well. To do this, use the -o command-line option.
-O seçeneği
Örnek ver

-s seçeneği
Açıklaması şöyle. Create Scheme, Create Table şeklinde sql cümleleri oluşturur.
dump only the schema, no data
Cümleler şunun gibidir
CREATE SCHEMA rdstest;
ALTER SCHEMA rdstest OWNER TO rdstest;
Örnek
Veri olmadan sadece tabloları oluşturmak için şöyle yaparız.
pg_dump -U postgres -n myschema -s mydatabase > schema.sql
-S seçeneği
Örnek ver

-t seçeneği
tablo ismini belirtir

Örnek
Şöyle yaparız
pg_dump -d postgres -t customer > /tmp/customer.sql

-T seçeneği
Örnek ver

-x seçeneği
Örnek ver

Hiç yorum yok:

Yorum Gönder