PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Bekerja Dengan Database PostgreSQL

Daftar Isi

Mencantumkan database
Membuang database
Membuang semua database
Membuang Hibah
Menghapus atau Menghapus Database
Menghapus a Hibah
Pulihkan Database
Pulihkan Hibah

PostgreSQL adalah mesin database alternatif yang sangat baik untuk MySQL atau MariaDB, tetapi mengelola database tersebut sangat berbeda, terutama bagi administrator sistem yang sangat terbiasa menggunakan MySQL dari baris perintah atau PHPMyAdmin. Banyak CMS dan aplikasi yang sudah tahu cara berinteraksi dengan database PostgreSQL, tetapi seperti MySQL, masih bergantung pada Anda untuk memelihara database tersebut.

Untuk artikel ini, kami akan berasumsi bahwa Anda menggunakan SSH ke server Anda sebagai pengguna 'root', dan telah menginstal server PostgreSQL dengan konfigurasi default, yang memerlukan koneksi sebagai pengguna 'postgres'. Oleh karena itu, sebagian besar perintah juga akan menggunakan opsi -U postgres. Perintah-perintah ini umumnya akan identik antara CentOS dan Ubuntu di sebagian besar versi modern tetapi diuji terutama pada server CentOS 7 VPS dan server Ubuntu 16.04 yang menjalankan PostgreSQL 9.2.

Membuat database dan hibah agak rumit, tetapi jika Anda menggunakan cPanel, Plesk, atau panel kontrol lain yang mendukung integrasi PostgreSQL, pengaturannya sangat mudah. Membuat database dan hibah ini dari baris perintah berada di luar cakupan artikel khusus ini, jadi kami juga akan menganggap Anda sudah menjalankan dan menggunakan database Anda.

Mencantumkan Database di PostgreSQL

Ini membantu untuk mengetahui nama pasti dari database yang akan Anda kerjakan, serta melakukan pemeriksaan ganda untuk memastikan bahwa Anda bekerja di server yang tepat. Mari daftar database PostgreSQL di mesin kita terlebih dahulu:
psql -l -U postgres

Output untuk perintah ini adalah tabel nama database, pemilik, dan hak akses. Kami akan menggunakan data dari kolom pertama saat menjelaskan nama database untuk perintah di masa mendatang. Untuk artikel ini, kami akan menggunakan database yang disebut “nama_database ”.

Jika Anda hanya memerlukan nama basis data, dan tidak ada informasi lain, Anda dapat memangkas informasi berlebih dengan melakukan kueri yang tepat untuk nama basis data:
psql -U postgres -tA -c 'select datname from pg_database;'

Perintah ini menjalankan perintah (dijelaskan dengan -c flag) untuk memilih nama dat kolom pg_database tabel global. -t menandai daftar hanya tupel (baris hasil) dan menyembunyikan deskriptor berlebih seperti header dan jumlah hasil, dan -A flag akan menghapus perataan, mencetak satu database per baris tanpa karakter di depan atau di belakang nama. Output dari perintah ini sangat berguna untuk membuat loop untuk dump database.

Buang Basis Data

Perintah dump akan mengambil salinan lengkap dari database, termasuk semua tabel, skema, dan data, dan menyimpannya dalam satu file terkompresi:
pg_dump -c -Fc -U postgres database_name > database_name.psql

Ada beberapa flag penting untuk perintah ini. -c , atau –bersih , memberi tahu pg_dump untuk menambahkan pernyataan DROP ke output, dan -Fc , atau –format=kustom , kompres dan atur output untuk digunakan dengan pg_restore kemudian. Format kustom memiliki fleksibilitas terbesar, dan menyimpan cadangan secara menguntungkan dalam satu file juga.

Buang Semua Basis Data

Kemungkinan akan lebih baik untuk mengeluarkan masing-masing database ke dalam filenya sendiri dengan menjalankan perintah di atas beberapa kali. Kami akan mereferensikan perintah daftar kedua kami, mengambil beberapa database yang tidak dibutuhkan, untuk membuat dump individual kami.
for db in $(psql -U postgres -tA -c 'select datname from pg_database;' | grep -E -v “^(template1|template0|postgres)$”); do
echo $db
pg_dump -c -Fc -U postgres $db > $db.psql
done

Perulangan for ini akan meneruskan daftar semua database, selain template default dan database postgres, ke dalam pg_dump perintah untuk membuat .psql file untuk masing-masing di direktori saat ini.

Catatan:Dimungkinkan juga untuk melakukan dump semua database ke dalam satu file, meskipun dengan kumpulan data yang besar, ini bisa menjadi berat dan sulit untuk dipulihkan. Oleh karena itu, saya tidak merekomendasikan metode ini, meskipun tidak terlalu rumit dan dapat bekerja dalam beberapa situasi.

pg_dumpall --clean -U postgres > pg.all.psql

Hibah Dump

Hibah disimpan dalam skema PostgreSQL. Anda dapat membuang skema, sehingga mendapatkan semua hibah yang tersedia untuk sistem, menggunakan perintah pg_dump:
pg_dumpall -U postgres -s > pg.schema.psql

Ini tidak hanya akan membuang hibah, tetapi juga skema server lainnya, termasuk pernyataan pembuatan database dan tabel, kepemilikan dan keanggotaan peran, dan alokasi ACL – pada dasarnya, semuanya kecuali data.

Jika Anda hanya membutuhkan pengguna (peran) dan hibah, Anda dapat mengumpulkannya menggunakan perintah ini:
pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' -e '^(CREATE|ALTER)\ ROLE' > pg.grants.psql

Ini memanfaatkan dump skema penuh tetapi hanya mengambil pernyataan pembuatan peran dan pernyataan grant/revoke untuk mengumpulkan pengguna dan grants.

Hapus atau Jatuhkan Basis Data

Untuk menghancurkan database, sintaksnya sangat mudah. Harap berhati-hati saat mengetik perintah ini, karena perintah ini tidak meminta Anda untuk mengonfirmasi!
psql -U postgres -c ‘drop database database_name’

Jika database ada, tidak akan ada lagi. Ada juga pembungkus baris perintah untuk tugas yang sama ini:
dropdb -U postgres database_name

Menghapus Hibah

Hibah dihapus dari pengguna dengan mencabutnya. Penting terlebih dahulu untuk mengetahui hibah apa yang dimiliki pengguna tertentu, jadi mari kita cari mereka dengan membuang skema dan menemukan baris yang terkait dengan pengguna kita.
pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' | grep database_user

Dalam kasus saya, ada hibah yang terlihat seperti ini:
GRANT ALL ON DATABASE database_name TO database_user;

Untuk mengatasi hal ini, kami akan mencabut deskriptor yang sama:
psql -U postgres -c ‘revoke all on database database_name from database_user;’

Catatan:Perhatikan sedikit perubahan, GRANT diubah menjadi REVOKE, dan TO diubah menjadi FROM. Perintah ini dibungkus dalam tanda kutip tunggal dan diteruskan ke psql dengan flag -c untuk menjalankan perintah di PostgreSQL.
Ini akan menggantikan pernyataan GRANT asli dengan REVOKE dalam skema. Menjalankan perintah pertama di bagian ini lagi sekarang hanya menampilkan baris yang baru saja kita lewati:
REVOKE ALL ON DATABASE database_name FROM database_user;

Memulihkan Basis Data

Untuk database yang dibuang menggunakan metode pg_dump yang digunakan dalam artikel ini, kita dapat memulihkan seluruh database menggunakan perintah ini:
pg_restore -U postgres -c -C -O -d database_name database_name.psql

Cukup banyak bendera lagi yang dibutuhkan di sini! -c atau –bersih , seperti sebelumnya, menjatuhkan objek database sebelum menulis dari file ke PostgreSQL. Kami menambahkan ini untuk berjaga-jaga jika tidak digunakan untuk perintah dump. -C , atau –buat , akan membuat database database_name saat restore jika tidak ada. Jika database sudah ada, -c bendera akan menghancurkannya sebelum -C menciptakannya kembali. Selanjutnya, ada -O , atau –tanpa pemilik , yang menghapus pemilik dari database. Ini memungkinkan cadangan dari sumber apa pun diubah menjadi pemilik pengguna yang melakukan pemulihan, yang dalam kasus kami adalah postgres. -d nama_database menjelaskan nama database yang akan Anda pulihkan. Ini bisa menjadi nama yang berbeda dari yang digunakan untuk membuat cadangan, jika diperlukan. Argumen terakhir adalah nama file cadangan kami, database_name.psql .

Pulihkan Hibah

Karena semua hibah disimpan dalam file pg.grants.psql kami, kami hanya perlu memilih pengguna yang perlu kami pulihkan. Dalam kasus kami, kami akan memulihkan database_user:
grep database_user pg.grants.psql | psql -U postgres

Karena file pg.grants.psql memiliki peran dan pemberian, perintah ini akan membuat ulang pengguna dengan hak istimewa dan sandi aslinya, lalu memberikan aksesnya ke database dan skema yang diperlukan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara keluar dari string saat mencocokkan pola di PostgreSQL

  2. Bagaimana cara meneruskan array tipe khusus ke fungsi Postgres

  3. Bagaimana mencegah penghapusan baris pertama dalam tabel (PostgreSQL)?

  4. SQL Isi tabel dengan data acak

  5. Bagaimana cara mencadangkan database postgresql dari dalam psql?