БпСстСтС 15% ΠΎΡ‚ всички хостинг услуги

ВСствай умСнията си ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠžΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° всСки хостинг ΠΏΠ»Π°Π½

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills Π—Π° Π½Π°Ρ‡Π°Π»ΠΎ
Заглавия
Linux Администрация

Как Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ с PostgreSQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ: Пълно Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° всички ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ

PostgreSQL Π΅ ΠΌΠΎΡ‰Π½Π°, Π±ΠΎΠ³Π°Ρ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ систСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ (RDBMS), която Π΅ спСчСлила рСпутация Π·Π° надСТдност, Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚ ΠΈ висока производитСлност. ΠžΡ‚ Π»Π΅ΠΊΠΈ ΡƒΠ΅Π± прилоТСния Π΄ΠΎ слоТни систСми Π½Π° Π½ΠΈΠ²ΠΎ прСдприятиС, PostgreSQL Π΅ прСдпочитаният ΠΈΠ·Π±ΠΎΡ€ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ ΠΏΠΎ Π΄Π°Π½Π½ΠΈ ΠΈ администратори Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ цСлия свят. НСйната Π½Π°Π΄Π΅ΠΆΠ½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΎΡ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ Π½Π° SQL ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ я правят Π΅Π΄Π½Π° ΠΎΡ‚ Π½Π°ΠΉ-Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ Π·Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π½Π°Π»ΠΈΡ‡Π½ΠΈ днСс.

НСзависимо Π΄Π°Π»ΠΈ настройватС Π½ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² срСда Π½Π° VPS Hosting ΠΈΠ»ΠΈ управляватС производствСна Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π½Π° Dedicated Server, Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΊΠ°ΠΊ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ към PostgreSQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ ΡƒΠΌΠ΅Π½ΠΈΠ΅. ΠŸΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° осигурява бСзопасСн Π΄ΠΎΡΡ‚ΡŠΠΏ, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½Π° производитСлност ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ β€” ΠΈ Ρ‚ΠΎΠ²Π° Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΈΡ ΠΏΡŠΡ€Π²ΠΈ Π΅Ρ‚Π°ΠΏ ΠΏΡ€Π΅Π΄ΠΈ изпълнСниС Π½Π° заявки, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ СкспортиранС Π½Π° Π΄Π°Π½Π½ΠΈ, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° потрСбитСлски Ρ€ΠΎΠ»ΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ с прилоТСния.

Π’ΠΎΠ²Π° всСобхватно Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΎΠ±Ρ…Π²Π°Ρ‰Π° всСки основСн ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ към PostgreSQL: интСрфСйса Π½Π° командния Ρ€Π΅Π΄ (CLI), Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΈ GUI инструмСнти ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Python ΠΈ Node.js.

1. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ условия Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ към PostgreSQL

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅, ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Ρ‚Π΅, Ρ‡Π΅ слСднитС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ условия са Π½Π°Π»ΠΈΡ†Π΅:

PostgreSQL Π΅ инсталиран ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ

Π£Π±Π΅Π΄Π΅Ρ‚Π΅ сС, Ρ‡Π΅ PostgreSQL Π΅ инсталиран Π½Π° вашия Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ ΠΈΠ»ΠΈ Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ΠΌΡ€Π΅ΠΆΠΎΠ² Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ PostgreSQL ΡΡŠΡ€Π²ΡŠΡ€. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ услугата Ρ€Π°Π±ΠΎΡ‚ΠΈ с:

# On Linux (systemd-based)
sudo systemctl status postgresql

# On macOS (Homebrew)
brew services list | grep postgresql

# On Windows
sc query postgresql

НСобходими Π΄Π°Π½Π½ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ

Π—Π° всСки ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅, описан Π² Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ, Ρ‰Π΅ Π²ΠΈ трябват слСднитС Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅Π‘Ρ‚ΠΎΠΉΠ½ΠΎΡΡ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅
HostИмС Π½Π° хост Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈΠ»ΠΈ IP адрСсlocalhost ΠΈΠ»ΠΈ 127.0.0.1
PortΠŸΠΎΡ€Ρ‚ΡŠΡ‚, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ PostgreSQL ΡΠ»ΡƒΡˆΠ°5432
UsernameΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΠΊΠΈΡ Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° PostgreSQLpostgres
PasswordΠŸΠ°Ρ€ΠΎΠ»Π° Π·Π° посочСния ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»*(Π·Π°Π΄Π°Π΄Π΅Π½Π° ΠΏΡ€ΠΈ инсталация)*
Database NameΠ¦Π΅Π»Π΅Π²Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅postgres

ΠœΡ€Π΅ΠΆΠΎΠ² ΠΈ firewall Π΄ΠΎΡΡ‚ΡŠΠΏ

Π—Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ, ΡƒΠ±Π΅Π΄Π΅Ρ‚Π΅ сС, Ρ‡Π΅:

  • ΠŸΠΎΡ€Ρ‚ΡŠΡ‚ 5432 Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π² ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° firewall Π½Π° вашия ΡΡŠΡ€Π²ΡŠΡ€.
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡΡ‚ Ρ„Π°ΠΉΠ» Π½Π° PostgreSQL pg_hba.conf позволява ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ ΠΎΡ‚ вашия IP адрСс.
  • Π€Π°ΠΉΠ»ΡŠΡ‚ postgresql.conf ΠΈΠΌΠ° listen_addresses Π·Π°Π΄Π°Π΄Π΅Π½ подходящо (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ '*' Π·Π° всички интСрфСйси, ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ IP).

2. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ към PostgreSQL Ρ‡Ρ€Π΅Π· интСрфСйса Π½Π° командния Ρ€Π΅Π΄ (CLI)

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ psql ΠΎΡ‚ командния Ρ€Π΅Π΄ Π΅ Π½Π°ΠΉ-ΠΏΡ€Π΅ΠΊΠΈΡ‚Π΅ ΠΈ унивСрсално Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° взаимодСйствиС с PostgreSQL. Π’ΠΎΠΉ Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ инсталиран с всяка стандартна инсталация Π½Π° PostgreSQL ΠΈ Π΅ прСдпочитаният инструмСнт Π·Π° систСмни администратори ΠΈ Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 1: ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ вашия Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈΠ»ΠΈ командния Ρ€Π΅Π΄

  • Linux / macOS: ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π²Π°ΡˆΠ΅Ρ‚ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • Windows: ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Command Prompt, PowerShell ΠΈΠ»ΠΈ Windows Terminal. Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ дирСкторията Π½Π° PostgreSQL bin Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към Π²Π°ΡˆΠ°Ρ‚Π° систСмна PATH.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 2: Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ синтаксиса Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° psql

Бтандартният синтаксис Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° psql Π΅:

psql -h host -p port -U username -d database

Π Π°Π·Π±ΠΈΠ²ΠΊΠ° Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅:

  • -h host β€” ИмС Π½Π° хост Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈΠ»ΠΈ IP адрСс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ localhost Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ IP ΠΊΠ°Ρ‚ΠΎ 192.168.1.100).
  • -p port β€” ΠŸΠΎΡ€Ρ‚ΡŠΡ‚, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ PostgreSQL ΡΠ»ΡƒΡˆΠ° (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: 5432).
  • -U username β€” ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΠΊΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ Π½Π° PostgreSQL Π·Π° удостовСряванС.
  • -d database β€” ИмС Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, към която искатС Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 3: Π˜Π·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ практичСски ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅

Π—Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ към Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ с ΠΈΠΌΠ΅ mydb Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π»ΠΎΠΊΠ°Π»Π½Π° машина ΠΊΠ°Ρ‚ΠΎ супСрпотрСбитСл postgres:

psql -h localhost -p 5432 -U postgres -d mydb

Π©Π΅ Π±ΡŠΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ°Π½Π΅Π½ΠΈ Π΄Π° Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π°. Π‘Π»Π΅Π΄ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ удостовСряванС Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΊΠ°Π·ΠΊΠ°Ρ‚Π° Π½Π° shell psql:

mydb=#

Π‘Ρ‚ΡŠΠΏΠΊΠ° 4: Π˜Π·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ заявки Π² shell Π½Π° psql

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ стС Π²ΡŠΡ‚Ρ€Π΅ Π² shell Π½Π° psql, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ всяка SQL заявка Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ:

-- Check the PostgreSQL server version
SELECT version();

-- List all databases
l

-- List all tables in the current database
dt

-- Run a query
SELECT * FROM my_table;

-- Describe a table's structure
d my_table

Π‘Ρ‚ΡŠΠΏΠΊΠ° 5: Π˜Π·Π»Π΅Π·Ρ‚Π΅ ΠΎΡ‚ shell Π½Π° psql

Π—Π° затварянС Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ‚ psql:

q

ИзползванС Π½Π° Π½ΠΈΠ· Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ (URI Ρ„ΠΎΡ€ΠΌΠ°Ρ‚)

PostgreSQL ΡΡŠΡ‰ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Ρ‡Ρ€Π΅Π· URI Π½ΠΈΠ·, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π° скриптванС:

psql "postgresql://postgres:your_password@localhost:5432/mydb"

ИзползванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΡ€ΡŠΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ PGPASSWORD

Π—Π° избягванС Π½Π° ΠΏΠΎΠ΄ΠΊΠ°Π½Π²Π°Π½Π΅ Π·Π° ΠΏΠ°Ρ€ΠΎΠ»Π° Π² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ скриптовС:

export PGPASSWORD='your_password'
psql -h localhost -p 5432 -U postgres -d mydb

> Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° Π·Π° сигурност: Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° PGPASSWORD Π² shell скриптовС ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π·ΠΊΡ€ΠΈΠ΅ ΡƒΡ‡Π΅Ρ‚Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ Π½Π° процСситС. Π—Π° производствСни срСди ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» .pgpass вмСсто Ρ‚ΠΎΠ²Π° (ΠΎΠ±Ρ…Π²Π°Π½Π°Ρ‚ Π² Ρ€Π°Π·Π΄Π΅Π»Π° Най-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° сигурност).

3. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ с PostgreSQL с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΈ инструмСнти

Π—Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ Π²ΠΈΠ·ΡƒΠ°Π»Π΅Π½ интСрфСйс, няколко ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ GUI ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° улСсняват ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ, заявкитС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° PostgreSQL Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π±Π΅Π· нСобходимост Π΄Π° запомнятС синтаксиса Π½Π° командния Ρ€Π΅Π΄.

3.1 pgAdmin β€” официалният PostgreSQL GUI

pgAdmin Π΅ официалният инструмСнт с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π·Π° администрация ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° PostgreSQL. Π’ΠΎΠΉ прСдоставя всСобхватСн ΡƒΠ΅Π±-Π±Π°Π·ΠΈΡ€Π°Π½ ΠΈ настолСн интСрфСйс Π·Π° изпълнСниС Π½Π° SQL заявки, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° производитСлността ΠΈ визуализация Π½Π° Π΄Π°Π½Π½ΠΈ.

Как Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ с pgAdmin

Π‘Ρ‚ΡŠΠΏΠΊΠ° 1: Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ ΠΈ инсталиранС Π½Π° pgAdmin

Π˜Π·Ρ‚Π΅Π³Π»Π΅Ρ‚Π΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия ΠΎΡ‚ официалния уСбсайт Π½Π° pgAdmin. ΠŸΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° инсталиранС са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π·Π° Windows, macOS ΠΈ Linux.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 2: Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° pgAdmin

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ pgAdmin. Π’ΠΎΠΉ Ρ‰Π΅ сС стартира във вашия Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (Π·Π° настолната вСрсия) ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚ΠΎ самостоятСлно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 3: БъздаванС Π½Π° Π½ΠΎΠ²ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ със ΡΡŠΡ€Π²ΡŠΡ€

  1. Π’ лСвия ΠΏΠ°Π½Π΅Π» Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ с дясния Π±ΡƒΡ‚ΠΎΠ½ Π²ΡŠΡ€Ρ…Ρƒ Servers.
  2. Π˜Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Create β†’ Server…

Π‘Ρ‚ΡŠΠΏΠΊΠ° 4: ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° General

  • Name: Π’ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ описатСлното ΠΈΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ²Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Production DB ΠΈΠ»ΠΈ Local Development).

Π‘Ρ‚ΡŠΠΏΠΊΠ° 5: ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° Connection

ΠŸΠΎΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ слСднитС ΠΏΠΎΠ»Π΅Ρ‚Π°:

ΠŸΠΎΠ»Π΅Π‘Ρ‚ΠΎΠΉΠ½ΠΎΡΡ‚
Host name/addresslocalhost (ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ IP/ΠΈΠΌΠ΅ Π½Π° хост)
Port5432
Maintenance databasepostgres
Usernamepostgres
PasswordΠ’Π°ΡˆΠ°Ρ‚Π° ΠΏΠ°Ρ€ΠΎΠ»Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π½Π° PostgreSQL

По ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚Π½Π΅Ρ‚Π΅ Save password Π·Π° удобство Π² срСди Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 6: Π—Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅

Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Save. pgAdmin Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π° Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅. ΠŸΡ€ΠΈ успСх Π²Π°ΡˆΠΈΡΡ‚ ΡΡŠΡ€Π²ΡŠΡ€ Ρ‰Π΅ сС появи Π² лСвия ΠΏΠ°Π½Π΅Π» ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ‚Π΅, Π·Π° Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, схСми, Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 7: ИзпълнСниС Π½Π° заявки

Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ с дясния Π±ΡƒΡ‚ΠΎΠ½ Π²ΡŠΡ€Ρ…Ρƒ всяка Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Query Tool, Π·Π° Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π½Π° SQL. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ заявки, Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΈ Π΄Π° СкспортиратС Π΄Π°Π½Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ интСрфСйса.

3.2 DBeaver β€” унивСрсалСн ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ

DBeaver Π΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π΅Π½, с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, ΠΊΡ€ΡŠΡΡ‚ΠΎΡΠ°Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° инструмСнт Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π½Π°Π΄ 80 систСми Π·Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ PostgreSQL. Π’ΠΎΠΉ Π΅ особСно популярСн срСд Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ работят с мноТСство Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠΌΠ°Ρ‚ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° визуализация Π½Π° Π΄Π°Π½Π½ΠΈ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ER Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ ΠΈ СкспортиранС Π½Π° Π΄Π°Π½Π½ΠΈ.

Как Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ с DBeaver

Π‘Ρ‚ΡŠΠΏΠΊΠ° 1: Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ ΠΈ инсталиранС Π½Π° DBeaver

Π˜Π·Ρ‚Π΅Π³Π»Π΅Ρ‚Π΅ DBeaver Community Edition (Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ) ΠΎΡ‚ официалния уСбсайт Π½Π° DBeaver. Π’ΠΎΠΉ Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π·Π° Windows, macOS ΠΈ Linux.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 2: БъздаванС Π½Π° Π½ΠΎΠ²ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ

  1. ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ DBeaver.
  2. Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π±ΡƒΡ‚ΠΎΠ½Π° New Database Connection (ΠΈΠΊΠΎΠ½Π° Π½Π° щСпсСл Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° Π»Π΅Π½Ρ‚Π° с инструмСнти) ΠΈΠ»ΠΈ ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Database β†’ New Database Connection.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 3: Π˜Π·Π±ΠΎΡ€ Π½Π° PostgreSQL ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ

ΠžΡ‚ списъка Π½Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ PostgreSQL ΠΈ Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Next.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 4: Π’ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅

ΠŸΠΎΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅:

ΠŸΠΎΠ»Π΅Π‘Ρ‚ΠΎΠΉΠ½ΠΎΡΡ‚
Hostlocalhost ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ IP/ΠΈΠΌΠ΅ Π½Π° хост
Port5432
Databasemydb (ΠΈΠ»ΠΈ Π²Π°ΡˆΠ°Ρ‚Π° Ρ†Π΅Π»Π΅Π²Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ)
Usernamepostgres
PasswordΠ’Π°ΡˆΠ°Ρ‚Π° ΠΏΠ°Ρ€ΠΎΠ»Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π½Π° PostgreSQL

Π‘Ρ‚ΡŠΠΏΠΊΠ° 5: ВСстванС Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ

Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Test Connection. DBeaver Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π° Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ ΠΈ Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° успСх ΠΈΠ»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°. Ако Π΅ ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ PostgreSQL с DBeaver, Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΈ ΠΏΠΎΠ΄ΠΊΠ°Π½ΠΈ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ нСобходимия JDBC Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ β€” Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Download, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 6: Π—Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ ΠΈ Π½Π°Ρ‡Π°Π»ΠΎ Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ

Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Finish. Π’Π°ΡˆΠ΅Ρ‚ΠΎ PostgreSQL ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Ρ‰Π΅ сС появи Π² ΠΏΠ°Π½Π΅Π»Π° Database Navigator отляво. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ SQL заявки Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π½Π° SQL, Π΄Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Ρ‚Π΅/СкспортиратС Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚Π΅ ER Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ.

4. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ към PostgreSQL ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΎ

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ към PostgreSQL ΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-чСсто срСщанитС Ρ€Π΅Π°Π»Π½ΠΈ случаи Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°. По-Π΄ΠΎΠ»Ρƒ са ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ, Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π·Π° производство, Π·Π° Π΄Π²Π°Ρ‚Π° Π½Π°ΠΉ-популярни Π΅Π·ΠΈΠΊΠ°: Python ΠΈ Node.js.

4.1 Python β€” ИзползванС Π½Π° psycopg2

psycopg2 Π΅ Π½Π°ΠΉ-ΡˆΠΈΡ€ΠΎΠΊΠΎ използваният PostgreSQL Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Π·Π° Python. Π’ΠΎΠΉ Π΅ Π±ΡŠΡ€Π·, бСзопасСн Π·Π° нишки ΠΈ напълно ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ Π½Π° спСцификацията Python DB-API 2.0.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° psycopg2

pip install psycopg2

Π—Π° срСди, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π΅ Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π½ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ двоичния ΠΏΠ°ΠΊΠ΅Ρ‚:

pip install psycopg2-binary

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ към PostgreSQL с psycopg2

import psycopg2
from psycopg2 import OperationalError

def create_connection():
    connection = None
    try:
        connection = psycopg2.connect(
            user="postgres",
            password="your_password",
            host="127.0.0.1",
            port="5432",
            database="mydb"
        )
        print("Connection to PostgreSQL successful.")
    except OperationalError as e:
        print(f"The error '{e}' occurred.")
    return connection

def execute_query(connection, query):
    cursor = connection.cursor()
    try:
        cursor.execute(query)
        connection.commit()
        print("Query executed successfully.")
    except Exception as e:
        print(f"The error '{e}' occurred.")
    finally:
        cursor.close()

# Establish the connection
conn = create_connection()

# Execute a sample query
if conn:
    execute_query(conn, "SELECT version();")

    # Fetch and display results
    cursor = conn.cursor()
    cursor.execute("SELECT version();")
    record = cursor.fetchone()
    print(f"PostgreSQL server version: {record[0]}")

    # Close the connection
    cursor.close()
    conn.close()
    print("PostgreSQL connection closed.")

ИзползванС Π½Π° URI Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с psycopg2

import psycopg2

DATABASE_URL = "postgresql://postgres:your_password@127.0.0.1:5432/mydb"

connection = psycopg2.connect(DATABASE_URL)
cursor = connection.cursor()
cursor.execute("SELECT current_database();")
print(cursor.fetchone())
connection.close()

4.2 Node.js β€” ИзползванС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° pg

ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ node-postgres (pg) Π΅ стандартният PostgreSQL ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π° Node.js. Π’ΠΎΠΉ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠ°ΠΊΡ‚ΠΎ callback-Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ async/await ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Ρ‡Ρ€Π΅Π· ΠΏΡƒΠ» pg.Pool.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° pg

npm install pg

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ с Π΅Π΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (async/await)

const { Client } = require('pg');

const client = new Client({
  host: 'localhost',
  port: 5432,
  user: 'postgres',
  password: 'your_password',
  database: 'mydb',
});

async function connectAndQuery() {
  try {
    await client.connect();
    console.log('Connected to PostgreSQL successfully.');

    const result = await client.query('SELECT version()');
    console.log('PostgreSQL version:', result.rows[0].version);

    const tableResult = await client.query('SELECT * FROM my_table LIMIT 10');
    console.log('Query results:', tableResult.rows);

  } catch (err) {
    console.error('Connection error:', err.message);
  } finally {
    await client.end();
    console.log('PostgreSQL connection closed.');
  }
}

connectAndQuery();

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ с ΠΏΡƒΠ» ΠΎΡ‚ ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ (ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π½ΠΎ Π·Π° производство)

Π—Π° производствСни прилоТСния Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΏΡƒΠ» ΠΎΡ‚ ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ, Π·Π° Π΄Π° управляватС Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ мноТСство Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ към Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ:

const { Pool } = require('pg');

const pool = new Pool({
  host: 'localhost',
  port: 5432,
  user: 'postgres',
  password: 'your_password',
  database: 'mydb',
  max: 20,               // Maximum number of connections in the pool
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 2000,
});

async function queryDatabase(sql, params = []) {
  const client = await pool.connect();
  try {
    const result = await client.query(sql, params);
    return result.rows;
  } catch (err) {
    console.error('Query error:', err.message);
    throw err;
  } finally {
    client.release(); // Always release the client back to the pool
  }
}

// Example usage
(async () => {
  const rows = await queryDatabase('SELECT * FROM my_table WHERE id = $1', [1]);
  console.log(rows);
})();

ИзползванС Π½Π° Π½ΠΈΠ· Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с Node.js

const { Client } = require('pg');

const client = new Client({
  connectionString: 'postgresql://postgres:your_password@localhost:5432/mydb',
});

client.connect()
  .then(() => client.query('SELECT NOW()'))
  .then(res => console.log('Current time:', res.rows[0]))
  .catch(err => console.error('Error:', err))
  .finally(() => client.end());

5. Common PostgreSQL Connection Errors and How to Fix Them

Even experienced administrators encounter connection issues. Here are the most common errors and their solutions:

Error: FATAL: role "postgres" does not exist

Cause: The specified PostgreSQL user does not exist on the server.

Fix:

# Create the user via the system's postgres account
sudo -u postgres createuser --superuser postgres

Error: could not connect to server: Connection refused

Cause: PostgreSQL is not running, or it is not listening on the expected host/port.

Fix:

# Start PostgreSQL
sudo systemctl start postgresql

# Verify it is listening on port 5432
sudo ss -tlnp | grep 5432

Also check postgresql.conf to ensure listen_addresses is correctly configured.

Error: FATAL: pg_hba.conf rejects connection

Cause: The pg_hba.conf file does not have an entry permitting your connection.

Fix: Edit /etc/postgresql/<version>/main/pg_hba.conf and add an appropriate rule:

# Allow local connections with password authentication
host    all             all             127.0.0.1/32            md5

# Allow connections from a specific remote subnet
host    all             all             192.168.1.0/24          md5

After editing, reload PostgreSQL:

sudo systemctl reload postgresql

Error: FATAL: password authentication failed

Cause: Incorrect password for the specified user.

Fix: Reset the password from within PostgreSQL:

ALTER USER postgres WITH PASSWORD 'new_secure_password';

Error: SSL connection required

Cause: The server requires an SSL/TLS encrypted connection.

Fix: Add sslmode=require to your connection string, or configure SSL properly. If you need a trusted SSL certificate for your server, consider SSL Certificates to secure your database connections end-to-end.

6. Security Best Practices for PostgreSQL Connections

Π—Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π° Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ PostgreSQL Π²Ρ€ΡŠΠ·ΠΊΠΈ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½Π°, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈ установяванСто ΠΈΠΌ. Π‘Π»Π΅Π΄Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅Π·ΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ във всяка срСда:

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ силни, ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ

Π’ΠΈΠ½Π°Π³ΠΈ Π·Π°Π΄Π°Π²Π°ΠΉΡ‚Π΅ силни ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π·Π° всички PostgreSQL ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° подразумСваният postgres супСрпотрСбитСл Π·Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ Π½Π° прилоТСния β€” ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ спСциализирани ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ.

-- Create a dedicated application user with limited privileges
CREATE USER app_user WITH PASSWORD 'StrongP@ssw0rd!2024';
GRANT CONNECT ON DATABASE mydb TO app_user;
GRANT USAGE ON SCHEMA public TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ .pgpass Ρ„Π°ΠΉΠ»Π° вмСсто ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСда

Π‘ΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ ΡƒΡ‡Π΅Ρ‚Π½ΠΈ Π΄Π°Π½Π½ΠΈ бСзопасно Π² .pgpass Ρ„Π°ΠΉΠ», Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π² историята Π½Π° shell ΠΈΠ»ΠΈ ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ Π½Π° процСситС:

# Create the file
echo "localhost:5432:mydb:postgres:your_password" >> ~/.pgpass

# Set correct permissions (required by PostgreSQL)
chmod 600 ~/.pgpass

Π’ΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ SSL/TLS Π·Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ

Никога Π½Π΅ ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΡ‡Π΅Ρ‚Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ заявки ΠΏΠΎ Π½Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΉΡ‚Π΅ PostgreSQL Π΄Π° изисква SSL:

# In postgresql.conf
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
# In pg_hba.conf β€” require SSL for all remote connections
hostssl    all    all    0.0.0.0/0    md5

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Ρ‡Ρ€Π΅Π· pg_hba.conf

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° Π½Π°ΠΉ-малкия ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ към мрСТовия Π΄ΠΎΡΡ‚ΡŠΠΏ. Π Π°Π·Ρ€Π΅ΡˆΠ΅Ρ‚Π΅ Π²Ρ€ΡŠΠ·ΠΊΠΈ само ΠΎΡ‚ извСстни, Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ IP адрСси ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Connection Pooling Π² Production

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ PgBouncer ΠΈΠ»ΠΈ вградСния pooling Π² pg.Pool (Node.js) намаляват Ρ€Π΅ΠΆΠΈΠΉΠ½ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ ΠΏΡ€ΠΈ установяванС Π½Π° Π½ΠΎΠ²ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π°Π²Π°Ρ‚ срСщу Π°Ρ‚Π°ΠΊΠΈ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‰Π°Π²Π°Π½Π΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ.

ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΉΡ‚Π΅ PostgreSQL Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½

Π’ΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°ΠΉΡ‚Π΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° стабилна вСрсия Π½Π° PostgreSQL, Π·Π° Π΄Π° сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΡ‚ ΠΏΠ°Ρ‡ΠΎΠ²Π΅ Π·Π° сигурност ΠΈ подобрСния Π½Π° производитСлността.

Π˜Π·Π±ΠΎΡ€ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° хостинг срСда Π·Π° PostgreSQL

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° ΠΈ надСТдността Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° PostgreSQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ зависят Π² голяма стСпСн ΠΎΡ‚ основната инфраструктура. Π•Ρ‚ΠΎ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° хостинг, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅:

  • VPS Π₯остинг β€” ИдСалСн Π·Π° срСди Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΌΠ°Π»ΠΊΠΈ Π΄ΠΎ срСдни производствСни Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π΅ΠΊΠΈΠΏΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ пълСн root Π΄ΠΎΡΡ‚ΡŠΠΏ, Π·Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚ PostgreSQL Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.
  • Dedicated Servers β€” Най-добрият ΠΈΠ·Π±ΠΎΡ€ Π·Π° високотрафични, рСсурсоСмки PostgreSQL Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ изискват максимална CPU, RAM ΠΈ I/O производитСлност Π±Π΅Π· сподСлянС Π½Π° рСсурси.
  • VPS с cPanel β€” ΠžΡ‚Π»ΠΈΡ‡Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π°ΠΊΠΎ искатС ΠΌΠΎΡ‰Ρ‚Π° Π½Π° VPS, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π° с лСсСн Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π» Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ настройки Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Ρ‡Ρ€Π΅Π· Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ интСрфСйс.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ към PostgreSQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π΅ основно ΡƒΠΌΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ ΠΏΠΎ Π΄Π°Π½Π½ΠΈ ΠΈ систСмСн администратор трябва Π΄Π° ΠΎΠ²Π»Π°Π΄Π΅Π΅. Π’ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π΅ ΠΎΠ±Ρ…Π²Π°Π½Π°Π»ΠΎ всички основни ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ:

  • CLI с psql β€” Π‘ΡŠΡ€Π·, ΠΌΠΎΡ‰Π΅Π½ ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ навсякъдС, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΅ инсталиран PostgreSQL.
  • pgAdmin β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈΡΡ‚ GUI Π·Π° Π²ΠΈΠ·ΡƒΠ°Π»Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ администриранС Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.
  • DBeaver β€” УнивСрсалСн, кросплатформСн GUI ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ мноТСство систСми Π·Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.
  • Python (psycopg2) β€” Бтандартният PostgreSQL Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Π·Π° Python прилоТСния.
  • Node.js (pg) β€” ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈΡΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Π·Π° PostgreSQL ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π² JavaScript/Node.js срСди.

Π§Ρ€Π΅Π· ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° правилния ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ със силни ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° сигурност ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π° инфраструктура Π·Π° хостванС, Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ солидна, бСзопасна ΠΈ високопроизводитСлна PostgreSQL конфигурация, Π³ΠΎΡ‚ΠΎΠ²Π° Π·Π° всяко Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ β€” ΠΎΡ‚ Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π΄ΠΎ прилоТСния Π² ΠΌΠ°Ρ‰Π°Π± Π½Π° прСдприятиС.