PostgreSQL

Jiyoung Joung, niko d, Héctor H. Louzao P Version F37 and newer Last review: 2022-12-19

ຜູ້ໃຊ້ຂອງ Fedora Server Edition ສາມາດຊອກຫາຂໍ້ມູນເພີ່ມເຕີມໄດ້ທີ່ Setting up PostgreSQL Database Server

ການຕິດຕັ້ງ

ການຕິດຕັ້ງ ແລະ ການຕັ້ງຄ່າເບື້ອງຕົ້ນຂອງເຊີບເວີ postgresql ແມ່ນຈະແຕກຕ່າງກັນເລັກນ້ອຍເມື່ອທຽບກັບແພັກເກດອື່ນໆ ແລະ Linux ດິສໂຕຣອື່ນໆ. ເອກະສານນີ້ມີຈຸດປະສົງເພື່ອສະຫຼຸບຂັ້ນຕອນການຕິດຕັ້ງພື້ນຖານທີ່ກ່ຽວຂ້ອງກັບລຸ້ນຫຼ້າສຸດຂອງ Fedora Linux.

$ sudo dnf install postgresql-server postgresql-contrib

ເຊີບເວີ postgresql ຈະບໍ່ເຮັດວຽກ ແລະ ຖືກປິດໄວ້ເປັນຄ່າເລີ່ມຕົ້ນ. ເພື່ອຕັ້ງຄ່າໃຫ້ມັນເລີ່ມເຮັດວຽກຕອນເປີດເຄື່ອງ, ໃຫ້ແລ່ນຄຳສັ່ງ:

$ sudo systemctl enable postgresql

ຖານຂໍ້ມູນຈໍາເປັນຕ້ອງໄດ້ໃສ່ຂໍ້ມູນເບື້ອງຕົ້ນຫຼັງຈາກການຕິດຕັ້ງ. ການຕັ້ງຄ່າຖານຂໍ້ມູນເບື້ອງຕົ້ນສາມາດເຮັດໄດ້ໂດຍໃຊ້ຄຳສັ່ງຕໍ່ໄປນີ້. ມັນຈະສ້າງໄຟລ໌ການຕັ້ງຄ່າ postgresql.conf ແລະ pg_hba.conf

$ sudo postgresql-setup --initdb --unit postgresql

ເພື່ອເລີ່ມຕົ້ນເຊີບເວີ postgresql ດ້ວຍຕົນເອງ, ໃຫ້ແລ່ນຄຳສັ່ງ

$ sudo systemctl start postgresql

ການສ້າງຜູ້ໃຊ້ ແລະ ການສ້າງຖານຂໍ້ມູນ

ດຽວນີ້ທ່ານຈຳເປັນຕ້ອງສ້າງຜູ້ໃຊ້ ແລະ ຖານຂໍ້ມູນສຳລັບຜູ້ໃຊ້. ສິ່ງນີ້ຈຳເປັນຕ້ອງແລ່ນຈາກບັນຊີຜູ້ໃຊ້ postgres ໃນລະບົບຂອງທ່ານ.

$ sudo -u postgres psql

ຈາກບ່ອນນີ້ທ່ານສາມາດສ້າງຜູ້ໃຊ້ postgres ແລະ ຖານຂໍ້ມູນໄດ້. ໃນທີ່ນີ້, ພວກເຮົາຈະສົມມຸດວ່າບັນຊີຜູ້ໃຊ້ໃນຄອມພິວເຕີຂອງທ່ານຊື່ວ່າ lenny. ໝາຍເຫດ: ທ່ານຍັງສາມາດແລ່ນຄຳສັ່ງນີ້ຈາກ shell ໄດ້ເຊັ່ນກັນດ້ວຍ createuser lenny ແລະ createdb --owner=lenny carl.

postgres=# CREATE USER lenny WITH PASSWORD 'leonard';
postgres=# CREATE DATABASE my_project OWNER lenny;

ມັນອາດຈະເປັນຄວາມຄິດທີ່ດີທີ່ຈະເພີ່ມລະຫັດຜ່ານສຳລັບຜູ້ໃຊ້ postgres ໃນຂະນະທີ່ທ່ານກຳລັງເຮັດຢູ່:

postgres=# \password postgres

ກົດ Ctrl + D ຫຼື \q ເພື່ອອອກຈາກເຊດຊັນ psql ທີ່ແລ່ນໃນນາມຜູ້ໃຊ້ postgres. ດຽວນີ້ທ່ານສາມາດເຂົ້າເຖິງຖານຂໍ້ມູນໃໝ່ຂອງທ່ານຈາກບັນຊີຜູ້ໃຊ້ຂອງທ່ານ (lenny) ແລະ ເລີ່ມນຳໃຊ້ມັນໄດ້.

$ psql my_project

ການຕັ້ງຄ່າເບື້ອງຕົ້ນ

ເຊີບເວີ postgresql ກຳລັງໃຊ້ໄຟລ໌ການຕັ້ງຄ່າຫຼັກສອງໄຟລ໌

  • /var/lib/pgsql/data/postgresql.conf

  • /var/lib/pgsql/data/pg_hba.conf

If you’re getting ident errors from your app you’ll probably need to perform the accepted solution described at https://serverfault.com/questions/406606/postgres-error-message-fatal-ident-authentication-failed-for-user?newreg=a4fdc3e21349449985cc65b82399c5b4

$ sudo gedit /var/lib/pgsql/data/pg_hba.conf

ແລະ ແກ້ໄຂ host all all 127.0.0.1/32 ident ໄປເປັນ host all all 127.0.0.1/32 md5 ແລະ host all all ::1/128 ident ໄປເປັນ host all all ::1/128 md5. ເມື່ອທ່ານໄດ້ປ່ຽນແປງສິ່ງນີ້ແລ້ວ, ໃຫ້ແນ່ໃຈວ່າໄດ້ເລີ່ມບໍລິການ postgresql ຄືນໃໝ່ເພື່ອໃຫ້ການປ່ຽນແປງມີຜົນ.

$ sudo systemctl restart postgresql

ການປ່ຽນແປງເຫຼົ່ານີ້ຈະອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນສ່ວນໃຫຍ່ເຊື່ອມຕໍ່ດ້ວຍ ຊື່ຜູ້ໃຊ້/ລະຫັດຜ່ານ ໄດ້.

ອັບເກຣດ

ດັ່ງທີ່ທ່ານເຫັນຈາກຂໍ້ຄວາມແຈ້ງຂໍ້ຜິດພາດໃນຕົວຢ່າງຂອງຂ້ອຍ, ມັນບໍ່ແມ່ນການຕິດຕັ້ງໃໝ່, ແຕ່ເປັນການອັບເກຣດ.

Nov 14 11:45:56 mlich-lenovo.usersys.redhat.com postgresql-check-db-dir[2108]: An old version of the database format was found.
Nov 14 11:45:56 mlich-lenovo.usersys.redhat.com postgresql-check-db-dir[2108]: Use "postgresql-setup upgrade" to upgrade to version 9.3.

ສຳລັບເວີຊັນ 9 ທ່ານສາມາດໃຊ້ເຄື່ອງມືອັບເກຣດໄດ້. ມັນຖືກຫຸ້ມຫໍ່ມາເປັນ postgresql-upgrade:

$ sudo postgresql-setup upgrade

Redirecting to /bin/systemctl stop  postgresql.service
Upgrading database: OK

The configuration files was replaced by default configuration.
The previous configuration and data are stored in folder /var/lib/pgsql/data-old.

See /var/lib/pgsql/pgupgrade.log for details.

ຂໍ້ມູນຖືກຈັດເກັບໄວ້ທີ່

  • /var/lib/pgsql/data

  • /var/lib/pgsql/data-old

ການອັບເກຣດຈະສຳຮອງຂໍ້ມູນທີ່ມີຢູ່ຂອງທ່ານ ແລະ ຍ້າຍຖານຂໍ້ມູນຂອງທ່ານ. ຢ່າລືມຍ້າຍການຕັ້ງຄ່າຂອງທ່ານນຳ (ຕົວຢ່າງດ້ວຍ meld: meld /var/lib/pgsql/data{,-old}/postgresql.conf).

ທ່ານອາດຈະຕ້ອງປ່ຽນ postgresql ໄປເປັນໂໝດ trust ກ່ອນການອັບເດດ. ສິ່ງນີ້ຄວນຈະຖືກແກ້ໄຂແລ້ວ.

ທ່ານຍັງສາມາດອັບເກຣດໄດ້ໂດຍການ dump ຖານຂໍ້ມູນຂອງທ່ານ ແລະ ໂຫຼດມັນເຂົ້າໄປໃໝ່. ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ໃຫ້ເບິ່ງ ເອກະສານທາງການ.

ການຂ້າມລຸ້ນໃຫຍ່

ໃນ Fedora 43 ແພັກເກດ Postgres ໄດ້ປ່ຽນຈາກ 16 ໄປເປັນ 18. ການອັບເກຣດຖານຂໍ້ມູນບໍ່ສາມາດຂ້າມລຸ້ນໃຫຍ່ໄດ້ ແລະ ຂັ້ນຕອນຂ້າງເທິງຈະບໍ່ເຮັດວຽກ. ນອກຈາກວ່າທ່ານໄດ້ອັບເກຣດເປັນ Postgres 17 ໃນ Fedora 42 ແລ້ວ, ທ່ານຈະຕ້ອງໄດ້ເຮັດການອັບເກຣດຈາກ 16 ໄປເປັນ 18 ໃນ 2 ຂັ້ນຕອນເທິງ Fedora 43.

ທຳອິດທ່ານຕ້ອງຖອນການຕິດຕັ້ງ Postgres 18 ແລະ ຕິດຕັ້ງ Postgres 17. ທ່ານສາມາດກວດສອບວ່າແພັກເກດໃດຖືກຕິດຕັ້ງດ້ວຍຄຳສັ່ງ rpm -qa |grep ^postgres ກ່ອນທີ່ທ່ານຈະຕິດຕັ້ງ Postgres 17, ກະລຸນາສຳຮອງຂໍ້ມູນໄດເຣັກທໍຣີຂໍ້ມູນຂອງທ່ານ. ເຖິງແມ່ນວ່າການສຳຮອງຂໍ້ມູນຈະເປັນສ່ວນໜຶ່ງຂອງຂັ້ນຕອນການອັບເກຣດ, ການປ້ອງກັນໄວ້ກ່ອນກໍຍັງດີກວ່າການແກ້ໄຂພາຍຫຼັງ. ຫຼັງຈາກຕິດຕັ້ງແພັກເກດ Postgres 17 ແລ້ວ, ທ່ານສາມາດໃຊ້ຂັ້ນຕອນການອັບເກຣດຂ້າງເທິງເພື່ອເຮັດການອັບເກຣດຕົວຈິງຈາກ 16 ໄປເປັນ 17. ຈາກນັ້ນທ່ານຕ້ອງຖອນການຕິດຕັ້ງ Postgres 17 ແລະ ຕິດຕັ້ງ Postgres 18 ອີກຄັ້ງ. ກະລຸນາແລ່ນຂັ້ນຕອນການອັບເກຣດຂ້າງເທິງອີກຄັ້ງໜຶ່ງ ແລະ ທຸກຢ່າງກໍຈະພ້ອມໃຊ້ງານ.

ໃນລະຫວ່າງຂັ້ນຕອນ 2 ຂັ້ນຕອນນີ້ ທ່ານອາດຈະພົບອຸປະສັກບາງຢ່າງ, ເຊິ່ງໄດ້ອະທິບາຍໄວ້ທີ່ນີ້:

In case you see the error old cluster does not use data checksums but the new one does you can either choose to create the checksums or upgrade with checksums disabled. To create the checksums, drop into the shell of the postgres user and run the following command: pg_checksums -e -D <data-dir>. However, when you see this error, you have already updated the packages to a newer release while the database is still on the previous one. Thus it might be easier to upgrade with PGSETUP_INITDB_OPTIONS="--no-data-checksums" postgresql-upgrade <data-dir> and create the checksums afterwards. Unless you changed the Postgres data directory, <data-dir> is /var/lib/pgsql/data.

ຢ່າລືມປັບປ່ຽນ ແລະ ຮວມໄຟລ໌ການຕັ້ງຄ່າຂອງທ່ານ (*.conf) ຈາກໄດເຣັກທໍຣີຂໍ້ມູນເກົ່າ ແລະ ໃໝ່ ລວມທັງອັບເດດການຈັດລຽງຂໍ້ມູນ (collation) ສຳລັບຖານຂໍ້ມູນທັງໝົດນຳ.

ອັບເດດການຈັດລຽງຂໍ້ມູນ (ໃນນາມຜູ້ໃຊ້ postgres): ALTER DATABASE <dbname> REFRESH COLLATION VERSION; \c <dbname>; REINDEX DATABASE;

ໄຟວໍລ໌

PostgreSQL operates on port 5432 (or whatever else you set in your postgresql.conf). In firewalld, to make the change persist after reboot:

$ sudo firewall-cmd --permanent --add-port=5432/tcp

To apply the change to the running firewall immediately:

$ sudo firewall-cmd --add-port=5432/tcp

ໃນກໍລະນີຂອງ iptables:

$ sudo iptables -A INPUT -p tcp --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT

ຈົ່ງຈື່ໄວ້ວ່າທ່ານອາດຈະບໍ່ຕ້ອງການເປີດເຊີບເວີຖານຂໍ້ມູນຂອງທ່ານໃຫ້ຄົນທັງໂລກເຂົ້າເຖິງໄດ້.

ເອສອີລີນຸກສ໌

ຖ້າທ່ານເປີດໃຊ້ງານ SELinux, ທ່ານອາດຈະພົບບັນຫາເມື່ອພະຍາຍາມຕັ້ງຄ່າທີ່ບໍ່ແມ່ນມາດຕະຖານ. ຕົວຢ່າງ: ຖ້າທ່ານຕ້ອງການປ່ຽນຕຳແໜ່ງທີ່ຕັ້ງຂອງຖານຂໍ້ມູນຂອງທ່ານ, ທ່ານຕ້ອງເພີ່ມການຈັບຄູ່ບໍລິບົດ (context mapping) ໃໝ່ສຳລັບທີ່ຕັ້ງໃໝ່ນັ້ນ:

$ sudo semanage fcontext -a -t postgresql_db_t "/my/new/location(/.*)?"

ຖ້າພອດເລີ່ມຕົ້ນບໍ່ສາມາດເຮັດວຽກສຳລັບທ່ານໄດ້, ທ່ານອາດຈະຕ້ອງຈັບຄູ່ປະເພດພອດຂອງ postgres ໃຫ້ກົງກັບພອດທີ່ທ່ານຕ້ອງການ:

$ sudo semanage port -a -t postgresql_port_t -p tcp 5433

ຖ້າທ່ານຕິດຕັ້ງເວັບແອັບທີ່ຕ້ອງການສື່ສານກັບ PostgreSQL ຜ່ານ TCP/IP, ທ່ານຈະຕ້ອງບອກໃຫ້ SELinux ອະນຸຍາດສິ່ງນີ້ຢູ່ໃນໂຮສຂອງເຊີບເວີເວັບ:

$ sudo setsebool -P httpd_can_network_connect_db on

ການຕັ້ງຄ່າ

ດັ່ງທີ່ໄດ້ກ່າວໄວ້ຂ້າງເທິງ, ເຊີບເວີ postgresql ກຳລັງໃຊ້ໄຟລ໌ການຕັ້ງຄ່າຫຼັກສອງໄຟລ໌

  • /var/lib/pgsql/data/postgresql.conf

  • /var/lib/pgsql/data/pg_hba.conf

systemd

ພາລາມິເຕີການຕັ້ງຄ່າບາງຢ່າງຖືກສົ່ງໄປໃຫ້ daemon ຜ່ານຕົວເລືອກແຖວຄຳສັ່ງ (command line). ພຶດຕິກຳນີ້ອາດຈະຂຽນທັບການຕັ້ງຄ່າໃນ postgresql.conf. ຕົວຢ່າງ: ຖ້າທ່ານຕ້ອງການປ່ຽນໝາຍເລກພອດຂອງເຊີບເວີເປັນ 5433, ໃຫ້ສ້າງໄຟລ໌ຊື່ວ່າ /etc/systemd/system/postgresql.service ທີ່ມີເນື້ອຫາ:

.include /lib/systemd/system/postgresql.service
[Service]
Environment=PGPORT=5433

ໝາຍເຫດ: ໂດຍທົ່ວໄປແລ້ວການປ່ຽນ PGPORT ຫຼື PGDATA ແມ່ນຈະຕ້ອງໄດ້ປັບການຕັ້ງຄ່າ SELinux ເຊັ່ນກັນ; ໃຫ້ເບິ່ງທີ່ພາກ selinux.

ກະລຸນາປະຕິບັດຕາມເອກະສານຂອງ systemd 2 ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ.

postgresql.conf

ຖ້າທ່ານຕ້ອງການໃຫ້ postgres ຍອມຮັບການເຊື່ອມຕໍ່ເຄືອຂ່າຍ, ທ່ານຄວນປ່ຽນ

listen_addresses = 'localhost'

ໄປເປັນ

listen_addresses = '*'

pg_hba.conf

ເມື່ອຖານຂໍ້ມູນຂອງທ່ານຖືກຕັ້ງຄ່າແລ້ວ, ທ່ານຈຳເປັນຕ້ອງຕັ້ງຄ່າການເຂົ້າເຖິງເຊີບເວີຖານຂໍ້ມູນຂອງທ່ານ. ສິ່ງນີ້ອາດຈະເຮັດໄດ້ໂດຍການແກ້ໄຂໄຟລ໌ /var/lib/pgsql/data/pg_hba.conf. ຈະມີກົດເກນຕ່າງໆແນວນີ້ຢູ່ໃນໄຟລ໌:

# TYPE    DATABASE        USER            ADDRESS                 METHOD
  host    all             all             127.0.0.1/32            md5
  host    all             all             ::1/128                 md5
  local   all             postgres                                peer

ຊ່ອງທຳອິດໝາຍເຖິງປະເພດການເຊື່ອມຕໍ່. ມັນສາມາດມີຄ່າເຫຼົ່ານີ້:

  • local — ຊັອກເກັດ Unix-domain

  • host — ຊັອກເກັດ TCP/IP ແບບທຳມະດາ ຫຼື ແບບເຂົ້າລະຫັດ SSL

  • hostssl — ຊັອກເກັດ TCP/IP ແບບເຂົ້າລະຫັດ SSL

  • hostnossl — ຊັອກເກັດ TCP/IP ແບບທຳມະດາ

ຖັນສຸດທ້າຍຈະລະບຸວ່າວິທີການຢືນຢັນຕົວຕົນໃດທີ່ຈະຖືກນຳໃຊ້.

  • md5 — ໄຄລເອັນຕ້ອງສະໜອງລະຫັດຜ່ານທີ່ຖືກປະມວນຜົນດ້ວຍອັນກໍລິທຶມ MD5

  • ident — ຮັບຊື່ຜູ້ໃຊ້ຂອງໄຄລເອັນທີ່ເຊື່ອມຕໍ່ມາຈາກລະບົບປະຕິບັດການ ແລະ ກວດສອບມັນກັບແຜນຜັງທີ່ລະບຸໄວ້

  • trust — ໃຜກໍຕາມທີ່ສາມາດເຊື່ອມຕໍ່ກັບເຊີບເວີ PostgreSQL ໄດ້ ແມ່ນສາມາດກະທຳການ ໃນນາມຜູ້ໃຊ້ໃດກໍໄດ້ໂດຍບໍ່ຕ້ອງສະໜອງລະຫັດຜ່ານ

  • peer — ຮັບຊື່ຜູ້ໃຊ້ຈາກລະບົບປະຕິບັດການ ແລະ ກວດສອບເບິ່ງວ່າ ມັນກົງກັບຊື່ຜູ້ໃຊ້ໃນຖານຂໍ້ມູນຫຼືບໍ່

ເມື່ອເຊີບເວີຖານຂໍ້ມູນກຳລັງຢືນຢັນຕົວຕົນຂອງໄຄລເອັນ, ມັນຈະຊອກຫາບັນທຶກທີ່ມີປະເພດການເຊື່ອມຕໍ່, ທີ່ຢູ່ຂອງໄຄລເອັນ, ຖານຂໍ້ມູນທີ່ຮ້ອງຂໍ, ແລະ ຊື່ຜູ້ໃຊ້ທີ່ກົງກັນ. ທັນທີທີ່ມັນພົບຂໍ້ມູນປະຈຳຕົວເຫຼົ່ານີ້, ມັນຈະດຳເນີນການຢືນຢັນຕົວຕົນ. ຖ້າການຢືນຢັນຕົວຕົນລົ້ມເຫຼວ, ບັນທຶກອື່ນໆທີ່ຕາມມາຈະບໍ່ຖືກນຳມາພິຈາລະນາອີກ. ຖ້າບໍ່ມີບັນທຶກໃດກົງກັນເລີຍ, ການເຂົ້າເຖິງຂອງໄຄລເອັນຈະຖືກປະຕິເສດ.

ການຕັ້ງຄ່າເລີ່ມຕົ້ນມັກຈະຖືກຈຳກັດໄວ້ພຽງແຕ່ localhost ເທົ່ານັ້ນ.

ເມື່ອທ່ານຕິດຕັ້ງເຊີບເວີຖານຂໍ້ມູນຂອງທ່ານ ແລະ ໃນເບື້ອງຕົ້ນທ່ານພະຍາຍາມທີ່ຈະ "ເຮັດໃຫ້ມັນໃຊ້ງານໄດ້", ທ່ານຄວນປິດໄຟວໍລ໌, SELinux ແລະ ເຮັດໃຫ້ການຢືນຢັນຕົວຕົນຂອງ postgres ເປັນແບບອະນຸຍາດ. ຈົ່ງຈື່ໄວ້ວ່າສິ່ງນີ້ຈະເຮັດໃຫ້ເຊີບເວີຂອງທ່ານມີຄວາມສ່ຽງຫຼາຍ, ດັ່ງນັ້ນໃຫ້ເຮັດມັນ ສະເພາະ ໃນເຄືອຂ່າຍທີ່ເຊື່ອຖືໄດ້ເທົ່ານັ້ນ — ທາງທີ່ດີຄວນເປັນເຄືອຂ່າຍທີ່ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດເລີຍ:

host    all             all             127.0.0.1/32            trust

ທັນທີທີ່ທ່ານສາມາດເຊື່ອມຕໍ່ໄດ້, ໃຫ້ເປີດລະບົບຮັກສາຄວາມປອດໄພຂຶ້ນມາເທື່ອລະອັນ ໃນຂະນະທີ່ກວດສອບວ່າການເຊື່ອມຕໍ່ຍັງສາມາດສ້າງໄດ້ຢູ່.

ສຳລັບຂໍ້ມູນເພີ່ມເຕີມໃຫ້ເບິ່ງເອກະສານທາງການສຳລັບ ໄຟລ໌ pg_hba.conf.

ການປັບແຕ່ງໃຫ້ເໝາະສົມ

ການຕັ້ງຄ່າເລີ່ມຕົ້ນຂອງ postgres ແມ່ນຍັງບໍ່ທັນໄດ້ຮັບການປັບແຕ່ງເທົ່າທີ່ຄວນ. ມັນສາມາດຮອງຮັບແອັບພລິເຄຊັນງ່າຍໆທີ່ບໍ່ມີການເຂົ້າເຖິງຖານຂໍ້ມູນແບບຕໍ່ເນື່ອງໄດ້, ແຕ່ຖ້າທ່ານຕ້ອງການປະສິດທິພາບທີ່ສູງຂຶ້ນ, ທ່ານຄວນຕັ້ງຄ່າອິນສະແຕນຊ໌ຂອງທ່ານໃໝ່. ຄວາມມະຫັດສະຈັນທັງໝົດແມ່ນເກີດຂຶ້ນຢູ່ໃນ /var/lib/pgsql/data/postgresql.conf\`. ນອກຈາກນີ້, ກົນໄກການບັນທຶກລັອກ ກໍຍັງບໍ່ໄດ້ຖືກຕັ້ງຄ່າໃຫ້ເຂົ້າໃຈງ່າຍປານໃດ.

ປະສິດທິພາບ

ຈຳນວນໄຄລເອັນທີ່ອາດຈະເຊື່ອມຕໍ່ກັບ PostgreSQL ໄດ້ໃນເວລາຮ່ວມກັນ:

max_connections = <number>

shared_buffers ແມ່ນຈຸດເລີ່ມຕົ້ນ. ສິ່ງນີ້ເປັນການບອກໃຫ້ PostgreSQL ຮູ້ວ່າມີໜ່ວຍຄວາມຈຳຫຼາຍປານໃດທີ່ອຸທິດໃຫ້ກັບການແຄສ. ການຕັ້ງຄ່ານີ້ເປັນ 25% ຂອງໜ່ວຍຄວາມຈຳທັງໝົດໃນລະບົບຂອງທ່ານແມ່ນຈຸດເລີ່ມຕົ້ນທີ່ດີ. ຖ້າມັນບໍ່ເຮັດວຽກສຳລັບທ່ານ, ລອງປ່ຽນໄປໃຊ້ຄ່າລະຫວ່າງ 15% - 40% ຂອງໜ່ວຍຄວາມຈຳທັງໝົດ.

shared_buffers = <memory unit>

ຄ່ານີ້ຈະຖືກໃຊ້ໂດຍຕົວວາງແຜນການສອບຖາມ ເພື່ອໃຫ້ຮູ້ວ່າມີໜ່ວຍຄວາມຈຳຫວ່າງຫຼາຍປານໃດໃນລະບົບ. ຕົວວາງແຜນການສອບຖາມຈະໃຊ້ຂໍ້ມູນນີ້ເພື່ອຄຳນວນເບິ່ງວ່າແຜນການດັ່ງກ່າວຈະພໍດີກັບໜ່ວຍຄວາມຈຳຫຼືບໍ່. ການຕັ້ງຄ່ານີ້ເປັນ 50% ຂອງໜ່ວຍຄວາມຈຳທັງໝົດແມ່ນການປະຕິບັດທີ່ພົບເຫັນໄດ້ທົ່ວໄປ.

effective_cache_size = <memory unit>

ເມື່ອ PostgreSQL ເຮັດການປະຕິບັດງານຈັດລຽງລຳດັບ, ມັນຈະວາງແຜນຍຸດທະສາດວ່າຈະຈັດລຽງການສອບຖາມໃນດິສກ໌ ຫຼື ໃນໜ່ວຍຄວາມຈຳ. ຈົ່ງຈື່ໄວ້ວ່າໜ່ວຍຄວາມຈຳນີ້ມີໃຫ້ສຳລັບທຸກໆອິນສະແຕນຊ໌ການຈັດລຽງລຳດັບ. ໃນກໍລະນີທີ່ມີຜູ້ໃຊ້ຫຼາຍຄົນສົ່ງການສອບຖາມໄປຍັງເຊີບເວີຖານຂໍ້ມູນຂອງທ່ານ, ມັນອາດຈະເພີ່ມຂຶ້ນສູງຫຼາຍ. ດັ່ງນັ້ນສິ່ງນີ້ຈຶ່ງຜູກພັນກັນຢ່າງແໜ້ນໜາກັບ max_connections.

work_mem = <memory unit>

ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບຫົວຂໍ້ນີ້ ຂ້ອຍຂໍແນະນຳໃຫ້ທ່ານອ່ານ ເອກະສານທາງການ ກ່ຽວກັບການປັບແຕ່ງ PostgreSQL.

ການບັນທຶກລັອກ

ໂດຍຄ່າເລີ່ມຕົ້ນ, ໄຟລ໌ລັອກຈະຖືກໝຸນວຽນທຸກໆອາທິດ ແລະ ທ່ານອາດຈະບໍ່ພົບຂໍ້ມູນຫຍັງຫຼາຍຢູ່ໃນນັ້ນ. ຜູ້ໃຊ້ອາດຈະພາດລະດັບຂອງລັອກ, ວັນທີ, ເວລາ ແລະ ອື່ນໆ. ນອກຈາກນີ້, ສຳລັບເວັບແອັບພລິເຄຊັນງ່າຍໆ, ບາງຄົນມັກຈະເພີ່ມຄວາມລະອຽດຂອງລັອກຂຶ້ນ.

log_destination = 'stderr'

ອັນນີ້ກໍຖືວ່າດີແລ້ວ. ຖ້າທ່ານຕ້ອງການໃຫ້ syslog ເປັນຕົວຈັດການລັອກຂອງທ່ານ, ໃຫ້ປ່ຽນ 'stderr' ເປັນ 'syslog', ຫຼື ແມ້ກະທັ້ງ 'syslog,stderr'. ຖ້າທ່ານເລືອກໃຊ້ syslog, ຢ່າລືມຕັ້ງຄ່າ syslog ມັນເອງນຳ; ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ໃຫ້ເບິ່ງ ເອກະສານທາງການ.

logging_collector = on

ໃນກໍລະນີທີ່ບັນທຶກລັອກລົງໃນ stderr, postgres ຈະເກັບກຳລັອກທັງໝົດຖ້າທ່ານເປີດໃຊ້ຕົວເລືອກ logging_collector.

ນີ້ແມ່ນຕົວເລືອກເລີ່ມຕົ້ນ:

log_filename = 'postgresql-%a.log'

ວິທີທີ່ໜ້າຈະດີກວ່າກໍຄືການຕັ້ງຊື່ໄຟລ໌ລັອກຕາມວັນທີທີ່ພວກມັນຖືກສ້າງຂຶ້ນ:

log_filename = 'postgresql-%G-%m.log

ການໝຸນວຽນໄຟລ໌ລັອກ. ອັນນີ້ແມ່ນຂຶ້ນຢູ່ກັບຕົວແອັບເອງແທ້ໆ. ໃນກໍລະນີຂອງແອັບງ່າຍໆທີ່ມີຂໍ້ມູນໃນຖານຂໍ້ມູນໜ້ອຍ, ລັອກທັງໝົດອາດຈະຖືກເກັບໄວ້ຢ່າງຖາວອນໃນດິສກ໌ໂດຍບໍ່ມີການໝຸນວຽນ.

log_truncate_on_rotation = off
log_rotation_age = 31d

ເພີ່ມຈຳນວນລາຍການໃນລັອກ:

client_min_messages = notice      # default notice
log_min_messages = info           # default warning
log_min_error_statement = notice  # default error

ຖ້າທ່ານຕ້ອງການບັນທຶກລັອກການສອບຖາມທີ່ຊ້າ, ທ່ານສາມາດໃຊ້ຕົວເລືອກນີ້ໄດ້ເລີຍ:

log_min_duration_statement = 1000  # in ms

ລາຍການລັອກເລີ່ມຕົ້ນຈະບໍ່ມີຂໍ້ມູນຫຍັງຫຼາຍ:

FATAL:  Ident authentication failed for user "test"
DETAIL:  Connection matched pg_hba.conf line 84: "host    all             all             ::1/128                 ident"

ມາປັບປຸງມັນໃຫ້ເປັນແບບນີ້:

2013-12-30 17:51:36 CET testx@::1(50867):postgres [11213] FATAL:  password authentication failed for user "testx"
2013-12-30 17:51:36 CET testx@::1(50867):postgres [11213] DETAIL:  Connection matched pg_hba.conf line 84: "host   all             all             ::1/128                 md5 "

ທ່ານພຽງແຕ່ຕ້ອງປ່ຽນແປງຕົວເລືອກ log_line_prefix.

# %t -- timestamp
# %u -- user
# %r -- client's host
# %d -- database
# %p -- PID
log_line_prefix = '%t %u@%r:%d [%p] '

ຖ້າທ່ານກຳລັງແລ່ນຖານຂໍ້ມູນພຽງອັນດຽວທີ່ມີຜູ້ໃຊ້ພຽງຄົນດຽວເຊື່ອມຕໍ່ເຂົ້າມາ, ມັນຈະສົມເຫດສົມຜົນກວ່າທີ່ຈະເຮັດໃຫ້ຄຳນຳໜ້າງ່າຍຂຶ້ນເປັນ

log_line_prefix = '%t [%p] '

ການຕັ້ງຄ່າສະຫຼຸບ

log_destination = 'stderr'
logging_collector = on
log_filename = 'postgresql-%G-%m.log'
log_truncate_on_rotation = off
log_rotation_age = 31d
client_min_messages = notice
log_min_messages = info
log_min_error_statement = notice
log_line_prefix = '%t %u@%r:%d [%p] '

ເອກະສານອ້າງອີງ

ເຫັນຄຳຜິດ, ມີບາງຢ່າງຂາດຫາຍໄປ ຫຼື ຫຼ້າສະໄໝ, ຫຼື ມີສິ່ງອື່ນໃດທີ່ສາມາດປັບປຸງໄດ້ບໍ່? ແກ້ໄຂເອກະສານນີ້ໄດ້ທີ່ https://forge.fedoraproject.org/docs/quick-docs.