PostgreSQL: Pradžia

Kaip pradėti naudotis PostgreSQL

👋 Sveiki atvykę į Stackhero dokumentaciją!

Stackhero siūlo paruoštą naudoti PostgreSQL debesijos sprendimą, kuris suteikia daugybę privalumų, įskaitant:

  • Neriboti ryšiai ir duomenų perdavimai.
  • Įtraukta PgAdmin žiniatinklio sąsaja.
  • Daugybė modulių įtraukti, tokių kaip PostGIS, TimescaleDB ir PgVector.
  • Lengvi atnaujinimai vienu paspaudimu.
  • Optimali veikla ir tvirta sauga, užtikrinama privačios ir dedikuotos VM.

Taupykite laiką ir supaprastinkite savo gyvenimą: tereikia 5 minučių, kad išbandytumėte Stackhero PostgreSQL debesijos prieglobos sprendimą!

Galite valdyti PostgreSQL naudodami oficialų psql CLI. Jis gali būti įdiegtas jūsų kompiuteryje, leidžiant nuotoliniu būdu valdyti PostgreSQL paslaugą. Alternatyviai, galite jį paleisti per Docker. Šis metodas dažnai yra pageidaujamas, nes išvengiama psql diegimo tiesiogiai kompiuteryje ir lengviau keisti versijas.

Norėdami pasiekti psql naudojant Docker, paleiskite šią komandą (įsitikinkite, kad pakeitėte 18 į pagrindinį PostgreSQL paslaugos versijos numerį):

docker run -v $(pwd):/mnt -it postgres:18-alpine /bin/bash

Tada prisijunkite prie savo PostgreSQL paslaugos naudodami:

cd /mnt
psql \
  --host=<XXXXXX>.stackhero-network.com \
  --username=admin \
  --port=<PORT> \
  --dbname=admin

Pagal numatytuosius nustatymus sukuriamas admin vartotojas su administracinėmis teisėmis. Rekomenduojama sukurti atskirą vartotoją ir duomenų bazę kiekvienam projektui, kurį planuojate talpinti.

Norėdami naudoti PgAdmin žiniatinklio sąsają, atidarykite savo PostgreSQL domeną su HTTPS (pavyzdžiui, https://<XXXXXX>.stackhero-network.com). Prisijunkite su admin kaip vartotojo vardu ir slaptažodžiu, kurį nustatėte savo paslaugos konfigūracijoje (matomas jūsų Stackhero prietaisų skydelyje).

  1. Eikite į Servers / PostgreSQL, dešiniuoju pelės mygtuku spustelėkite Login/Group Roles ir pasirinkite Create / Login/Group Role:

    Vartotojo kūrimas PostgreSQL naudojant PgAdminVartotojo kūrimas PostgreSQL naudojant PgAdmin

  2. Nustatykite prisijungimo vardą:

    Nustatyti vartotojo prisijungimąNustatyti vartotojo prisijungimą

  3. Nustatykite saugų slaptažodį, kad išvengtumėte bruteforce atakų:

    Nustatyti vartotojo slaptažodįNustatyti vartotojo slaptažodį

  4. Galiausiai įsitikinkite, kad pasirinkta tik "Can login" privilegija:

    Nustatyti vartotojo teisesNustatyti vartotojo teises

Spustelėkite mygtuką "Save", kad sukurtumėte savo vartotoją.

  1. Eikite į Servers / postgresql, dešiniuoju pelės mygtuku spustelėkite Databases ir pasirinkite Create / Database...:

    Duomenų bazės kūrimas naudojant PgAdminDuomenų bazės kūrimas naudojant PgAdmin

Rekomenduojama naudoti tą patį pavadinimą tiek duomenų bazei, tiek vartotojui. Pavyzdžiui, jei jūsų projektas vadinasi "superWebsite", apsvarstykite galimybę sukurti vartotoją pavadinimu "superWebsite" ir duomenų bazę pavadinimu "superWebsite".

  1. Nustatykite duomenų bazės pavadinimą ir pasirinkite savininką (vartotoją, kurį ką tik sukūrėte):

    Nustatyti duomenų bazės pavadinimą ir savininkąNustatyti duomenų bazės pavadinimą ir savininką

Jūsų duomenų bazė dabar sukurta.

Norėdami sukurti vartotoją PostgreSQL naudojant psql CLI, paleiskite šią SQL užklausą:

CREATE ROLE "myProject" WITH
  LOGIN
  NOSUPERUSER
  NOCREATEDB
  NOCREATEROLE
  NOINHERIT
  NOREPLICATION
  CONNECTION LIMIT -1
  PASSWORD 'secretPassword';

Nepamirškite pakeisti myProject savo projekto pavadinimu ir secretPassword saugiu slaptažodžiu. Taip pat rekomenduojama naudoti savo projekto pavadinimą kaip prisijungimo ir duomenų bazės pavadinimą. Jei jūsų projektas vadinasi "superWebsite", apsvarstykite galimybę sukurti vartotoją pavadinimu "superWebsite" ir duomenų bazę pavadinimu "superWebsite".

Galite sugeneruoti saugų slaptažodį naudodami šią komandą: openssl rand -base64 24 | tr -d '\n' | cut -c1-32

Norėdami sukurti duomenų bazę PostgreSQL naudojant psql CLI, paleiskite šią SQL užklausą:

CREATE DATABASE "myProject"
  WITH
  OWNER = "myProject"
  ENCODING = 'UTF8'
  CONNECTION LIMIT = -1
  IS_TEMPLATE = false;

Rekomenduojama naudoti tą patį pavadinimą tiek duomenų bazei, tiek vartotojui. Pavyzdžiui, jei jūsų projektas vadinasi "superWebsite", apsvarstykite galimybę sukurti vartotoją pavadinimu "superWebsite" ir duomenų bazę pavadinimu "superWebsite".

Vienas iš paprasčiausių būdų importuoti duomenis iš kompiuterio į jūsų PostgreSQL instanciją yra naudoti PostgreSQL CLI. Savo kompiuteryje paleiskite šią komandą (pakeiskite <DB_NAME> savo duomenų bazės pavadinimu ir data.pgsql savo SQL failo pavadinimu):

psql \
  --host=<XXXXXX>.stackhero-network.com \
  --username=admin \
  --port=<PORT> \
  --dbname=<DB_NAME> \
  < data.pgsql

Duomenų eksportavimas iš jūsų PostgreSQL instancijos į kompiuterį yra taip pat paprastas naudojant PostgreSQL CLI.

  1. Norėdami eksportuoti visą duomenų bazę (pakeiskite <DB_NAME> savo duomenų bazės pavadinimu):

    pg_dump \
      --host=<XXXXXX>.stackhero-network.com \
      --username=admin \
      --port=<PORT> \
      --dbname=<DB_NAME> \
      > data.pgsql
    
  2. Norėdami eksportuoti vieną lentelę (pakeiskite <DB_NAME> savo duomenų bazės pavadinimu ir <TABLE_NAME> savo lentelės pavadinimu):

    pg_dump \
      --host=<XXXXXX>.stackhero-network.com \
      --username=admin \
      --port=<PORT> \
      --dbname=<DB_NAME> \
      --table=<TABLE_NAME> \
      > data.pgsql
    

Norėdami prisijungti prie PostgreSQL naudojant Node.js ir pg paketą (taip pat žinomą kaip node-postgres), galite apsvarstyti šį pavyzdį. Atkreipkite dėmesį į ssl argumentą, kuris yra svarbus užtikrinant TLS šifravimą:

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

(async () => {
  const pg = new Client({
    host: '<XXXXXX>.stackhero-network.com',
    port: <PORT>,
    user: '<USERNAME>',
    password: '<PASSWORD>',
    database: '<DATABASE>',
    ssl: {}
  });

  await pg.connect();

  const result = await pg.query('SELECT 1');

  await pg.end();
})().catch(error => {
  console.error('');
  console.error('🐞 Įvyko klaida!');
  console.error(error);
  process.exit(1);
});

Pilnas pavyzdys, kaip naudoti PostgreSQL su Node.js ir pg biblioteka (ir async/await), yra prieinamas šioje Git saugykloje: https://github.com/stackhero-io/postgresqlGettingStarted.

Norėdami prisijungti prie PostgreSQL iš Node.js naudojant TypeORM, nustatykite ssl vėliavą į true, kaip parodyta žemiau esančiame pavyzdyje:

createConnection({
  type: 'postgres',
  host: '<XXXXXX>.stackhero-network.com',
  port: <PORT>,
  username: '<USERNAME>',
  password: '<PASSWORD>',
  database: '<DATABASE>',
  extra: {
    ssl: true
  }
});

Jei jis dar nėra įdiegtas, įdiekite psycopg modulį, kuris bus naudojamas prisijungti prie PostgreSQL:

pip install psycopg

Šiame pradiniame žingsnyje slaptažodį saugosite tiesiogiai settings.py faile. Šis metodas skirtas tik testavimui, nes jis nėra saugus. Vėliau šioje dokumentacijoje rasite geros praktikos pavyzdį.

Atidarykite settings.py failą ir pridėkite šią konfigūraciją:

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'HOST': '<XXXXXX>.stackhero-network.com',
    'PORT': <PORT>,
    'OPTIONS': {
      'sslmode': 'require',
    },
    'NAME': 'admin',
    'USER': 'admin',
    'PASSWORD': '<ADMIN_PASSWORD>'
  }
}

Atsargiai: šis pavyzdys nerekomenduojamas gamybai ir skirtas tik testavimo tikslams!

Kai jūsų ryšys veikia, galite naudoti saugesnį būdą saugoti kredencialus. Šis pavyzdys naudoja django-environ ir saugo kredencialus .env faile.

  1. Įdiekite django-environ:

    pip install django-environ
    
  2. Atidarykite settings.py failą ir pakeiskite jį taip:

    import environ
    env = environ.Env()
    environ.Env.read_env()
    
    DATABASES = {
      'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': env('STACKHERO_POSTGRESQL_HOST'),
        'PORT': <PORT>,
        'OPTIONS': {
          'sslmode': 'require',
        },
        'NAME': 'admin',
        'USER': 'admin',
        'PASSWORD': env('STACKHERO_POSTGRESQL_ADMIN_PASSWORD')
      }
    }
    
  3. Atidarykite arba sukurkite .env failą tame pačiame kataloge kaip settings.py ir pridėkite:

    STACKHERO_POSTGRESQL_HOST=<XXXXXX>.stackhero-network.com
    STACKHERO_POSTGRESQL_ADMIN_PASSWORD=<ADMIN_PASSWORD>
    
  4. Galiausiai pridėkite .env prie savo .gitignore failo, kad užtikrintumėte, jog jūsų kredencialai nėra saugomi jūsų Git saugykloje:

echo ".env" >> .gitignore

PostGIS plėtinys yra įtrauktas į mūsų PostgreSQL paslaugą. Jūs turite jį aktyvuoti kiekvienoje duomenų bazėje, kurioje planuojate jį naudoti.

Norėdami aktyvuoti plėtinį, prisijunkite prie savo duomenų bazės ir vykdykite šią užklausą:

CREATE EXTENSION postgis;

Galite patikrinti, ar PostGIS veikia, patikrinę jo versiją:

SELECT PostGIS_Full_Version();

Alternatyviai, gaukite visų įdiegtų PostGIS plėtinių sąrašą:

SELECT * FROM pg_extension WHERE extname LIKE 'postgis%';

Jei reikia, galite pridėti kitų plėtinių. Tačiau labai rekomenduojama neaktyvuoti plėtinių, kurių nenaudosite:

-- Aktyvuoti PostGIS
CREATE EXTENSION postgis;

-- Aktyvuoti rasterio palaikymą
CREATE EXTENSION postgis_raster;

-- Aktyvuoti topologiją
CREATE EXTENSION postgis_topology;

-- Fuzzy matching reikalingas Tiger
CREATE EXTENSION fuzzystrmatch;

-- Taisyklėmis pagrįstas standartizatorius
CREATE EXTENSION address_standardizer;

-- Pavyzdinis taisyklių duomenų rinkinys
CREATE EXTENSION address_standardizer_data_us;

-- Aktyvuoti US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;

Atsargiai: neaktyvuokite PostGIS duomenų bazėje postgres!

Norėdami pašalinti PostGIS iš duomenų bazės, prisijunkite prie atitinkamos duomenų bazės ir vykdykite šią užklausą:

DROP EXTENSION postgis;

PgVector plėtinio aktyvavimas Stackhero yra paprastas. Vykdykite šią užklausą:

CREATE EXTENSION vector;

TimescaleDB plėtinio aktyvavimas Stackhero yra paprastas. Vykdykite šią užklausą:

CREATE EXTENSION timescaledb;

Norėdami įgalinti pg_stat_statements palaikymą, pirmiausia įgalinkite jį savo PostgreSQL konfigūracijoje per Stackhero prietaisų skydelį. Tada įgalinkite plėtinį savo dabartinei duomenų bazei vykdydami:

CREATE EXTENSION pg_stat_statements;

Daugiau informacijos rasite PostgreSQL oficialioje dokumentacijoje.

Naudoti Skyvia su Stackhero PostgreSQL yra paprasta. Užtikrinkite saugų ryšį konfigūruodami šiuos nustatymus:

  1. Nustatykite Protocol į SSL
  2. Nustatykite Port į savo PostgreSQL portą
  3. Priverskite šifravimą nustatydami SSL Mode į Require
  4. Pasirinkite SSL TLS Protocol 1.2 arba aukštesnį

Daugiau informacijos apie Skyvia konfigūraciją rasite Skyvia oficialioje dokumentacijoje.

Skyvia konfigūracijos pavyzdys su Stackhero PostgreSQLSkyvia konfigūracijos pavyzdys su Stackhero PostgreSQL