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

pg_ctl Tips dan Trik

pg_ctl adalah utilitas yang sangat berguna tetapi diremehkan yang dapat membuat kehidupan tim pengembangan lebih mudah. Baca terus untuk mempelajari lebih lanjut tentang pg_ctl dan bagaimana hal itu dapat meningkatkan alur kerja pengembangan dan pengujian Anda.

Apa itu pg_ctl?

pg_ctl adalah alat baris perintah yang disertakan dalam distribusi Postgres standar. Alat ini tersedia di mana pun Postgres itu sendiri, mirip dengan alat lain yang disertakan seperti psql dan pg_dump .

Eksekusi akan berada di direktori yang sama dengan binari Postgres lainnya. Lokasi tepatnya bervariasi menurut distro Linux dan versi Postgres:

# debain, ubuntu, ...
/usr/lib/postgresql/11/bin

# rhel, centos, ...
/usr/pgsql-11/bin

Anda mungkin ingin menambahkan direktori ini ke PATH Anda, atau alias pg_ctl ke path lengkap.

Buat Cluster Database

Tidak seperti RDBMS lainnya, satu proses server database Postgres (secara historis disebut postmaster ), mengelola kluster basis data . Penggunaan istilahcluster tidak modern, dan tidak mengacu pada sekelompok node jaringan. Cluster Adatabase menghosting sekumpulan database, dengan beberapa fitur (peran, replikasi fisik, file WAL, dll.) yang umum untuk semuanya. Layanan Postgressystemd yang diinstal oleh distro Linux Anda melayani cluster database tunggal.

Anda dapat menggunakan pg_ctl untuk membuat cluster database. Saat pembuatan, cluster hidup sepenuhnya dalam satu direktori. Ini berisi semua file konfigurasi yang diperlukan (postgres.conf , pg_hba.conf , dll.) dan file data. Itu mandiri, dan dapat dipindahkan ke mesin lain yang cukup mirip jika izin file ditangani dengan benar. Anda bahkan dapat menempatkan file log di dalam direktori, sehingga Anda memiliki semua file terkait (konfigurasi, data, log) di satu tempat.

Untuk membuat cluster database, gunakan:

$ pg_ctl -D myclus initdb

Ini membuat direktori bernama myclus di bawah direktori saat ini, dan mengisinya dengan semua file yang diperlukan untuk memulai server darinya.

Berikut adalah contoh sesi:

$ pg_ctl -D myclus initdb
The files belonging to this database system will be owned by user "alice".
This user must also own the server process.

The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

creating directory myclus ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... Etc/UTC
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /usr/lib/postgresql/11/bin/pg_ctl -D myclus -l logfile start

Memulai Server Database

“Server Postgres” pada dasarnya adalah postmaster proses yang dimulai dengan lokasi direktori cluster database. Proses postmaster ini secara bergantian memunculkan beberapa proses yang melakukan berbagai aktivitas latar belakang serta menangani koneksi masuk. Anda dapat melihat model proses ini beraksi dengan melihat pohon proses sistem menggunakan alat seperti htop, misalnya.

Untuk memulai proses postmaster untuk cluster database baru Anda, gunakan:

$ pg_ctl -D myclus -l myclus/log start

-l opsi menentukan lokasi file log Postgres, yang dalam hal ini berada di dalam direktori cluster itu sendiri. Bukan hal yang aneh untuk menempatkan file log di dalam direktori cluster.

Anda akan melihat output seperti ini:

waiting for server to start.... done
server started

Memuat ulang, memulai ulang, dan menghentikan terjadi seperti yang Anda harapkan:

$ pg_ctl -D myclus -l myclus/log reload
server signaled
$ pg_ctl -D myclus -l myclus/log restart
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
$ pg_ctl -D myclus -l myclus/log stop
waiting for server to shut down.... done
server stopped

Anda sekarang dapat terhubung ke cluster baru ini menggunakan klien seperti psql dan pgAdmin .

Mengatur Port Dan Opsi Lainnya

Praktisnya, jika Anda sudah menginstal Postgres di mesin Anda, Anda mungkin perlu mengedit myclus/postgres.conf dan ubah nilai untuk port , unix_socket_directories dan juga mungkin listen_address sebelum cluster dimulai dengan bersih. Ini karena Postgresservice yang diinstal sistem sudah berjalan pada port 5432 dan direktori diunix_socket_directories tidak dapat ditulis oleh pengguna biasa. Defaultnyalisten_address adalah localhost, artinya Anda tidak akan dapat terhubung ke cluster dari luar localhost.

Jika Anda menggunakan pg_ctl untuk membuat dan menghancurkan cluster dalam skrip pengujian otomatis Anda, akan lebih mudah jika Anda dapat menentukan opsi ini langsung dari baris perintah daripada mengedit myclus/postgres.conf secara terprogram .Anda dapat menentukan opsi seperti ini:

$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i" start

Ini memulai server pada port 6000, dengan soket unix dibuat di direktori /tmp dan mendengarkan di semua antarmuka.

Anda perlu menentukan opsi ini hanya untuk "mulai", Anda dapat menghilangkannya untuk perintah lain, termasuk bahkan "memulai ulang".

Opsi Mulai Berguna Lainnya

Ada beberapa opsi lain yang dapat Anda gunakan di dalam “-o” yang mungkin berguna:

  • -F menonaktifkan fsync, berguna untuk menyelesaikan skrip pengujian dengan lebih cepat
  • -B shared_bufffers setel nilai shared_buffers , contoh -B 100MB
  • -c conf_var=value atur nilai konfigurasi apa pun, contoh -c wal_level=logical

Berikut ini contoh dengan beberapa set ini:

$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i -B 100MB -c wal_level=logical" start

Opsi ini sebenarnya adalah opsi baris perintah dari postgres proses, daftar lengkapnya didokumentasikan di sini.

Jalankan Database dari Versi Postgres yang Berbeda

EnterpriseDB menghosting binari bawaan untuk berbagai versi Postgres untuk berbagai platform. Ini adalah tarball tanpa penginstal apa pun.

Ambil tarball yang Anda inginkan, buka kemasannya, cari pg_ctl biner dengan itu, dan menggunakannya untuk membuat sebuah cluster. pg_ctl akan secara otomatis menemukan initdb/postgres/biner lain terkait yang diperlukan untuk membuat/memulai cluster.

Anda dapat menggunakan ini terlepas dari, dan terlepas dari, instalasi PostgreSQL apa pun yang ada di mesin.

Buat Layanan di Windows

pg_ctl tersedia di semua platform, termasuk MacOS dan Windows. Secara khusus, Anda dapat menggunakannya untuk dengan mudah membuat layanan yang dapat dimulai dan dihentikan melalui Service Control Manager (SCM). Untuk membuat layanan, gunakan:

pg_ctl -D myclus -N myclus_service register

Ini membuat layanan mulai otomatis yang disebut “myclus_service”.

Fitur ini hanya tersedia di Postgres v10 ke atas.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya menggunakan nilai pengembalian INSERT...RETURNING di INSERT lain?

  2. psql:FATAL:basis data <pengguna> tidak ada

  3. Menggunakan INSERT dengan Database PostgreSQL menggunakan Python

  4. Performa TPC-H sejak PostgreSQL 8.3

  5. Bisakah saya menulis fungsi PostgreSQL di Ruby on Rails?