Skip to content

TenderPro/pgm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

pgm. Postgresql manager

pgm - это shell-скрипт для создания, обновлСния ΠΈ удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π‘Π”. Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии скрипт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π‘Π£Π‘Π” Postgresql.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² прСпроцСссингС .sql Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² (ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²) ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ скрипта для psql, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅Π³ΠΎ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π‘Π” ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

Быстрый старт

ВыполняСтся послС установки pg-skel.

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ - мСсто для Π½ΠΎΠ²ΠΎΠ³ΠΎ sql-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π² Π½Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ симлинк) pgm:

git clone https://github.com/TenderPro/pgm.git

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

bash pgm/pgm.sh check

Если Π½Π΅ всС Ок - Π½Π°Π΄ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰Π΅Π΅ ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌΠΈ срСдствами ОБ.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» настроСк .config

bash pgm/pgm.sh init

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ .config. Надо ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ создания Π‘Π”. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Доступ ΠΊ Π‘Π” ΠΏΠΎΠ΄ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ DB_TEMPLATE Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя шаблона Π‘Π”, созданного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pg-skel.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π‘Π”

bash pgm/pgm.sh createdb

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² pgm

SQLROOT=pgm/sql bash pgm/pgm.sh creatif ws utils

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚Π° sample

bash pgm/pgm.sh init sample

ПослС этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ созданы ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ sql/. (Π‘ΠΌ Π½ΠΈΠΆΠ΅ Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ SQL-ΠΊΠΎΠ΄Π°).

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π° demo Π² Π‘Π”

bash pgm/pgm.sh create sample

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π° sample с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ

bash pgm/pgm.sh recreate sample

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° sample

bash pgm/pgm.sh make sample

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π‘Π”

Π Π°Π±ΠΎΡ‚Π° с Π‘Π” являСтся Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΈΠ΄Π΅ΠΈ раздСлСния Π‘Π” Π½Π° Ρ‚Ρ€ΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…:

  1. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (ΠžΠ”) - Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² процСссС эксплуатации
  2. Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ связи этих Ρ‚Π°Π±Π»ΠΈΡ† (FOREIGN KEY, DEFAULT)
  3. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ)

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… (Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π² процСссС эксплуатации) ΠΈ справочных (Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ систСмы) Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. ВсС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² схСмС wsd
  2. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… схСмах
  3. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ измСнСния Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈ ΠΈΡ… чтСния) создаСтся Π² ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… схСмах

ΠšΡ€ΠΎΠΌΠ΅ этого, ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ pgm Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² схСмС ws.

Вакая рСализация позволяСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ вСсь ΠΊΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚Π° (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, справочныС Π΄Π°Π½Π½Ρ‹Π΅), сохранив ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (ΠΊΠΎΠΌΠ°Π½Π΄Π° drop) ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΠ² ΠΈ ΠΈΡ… (ΠΊΠΎΠΌΠ°Π½Π΄Π° erase), Ρ‚.Π΅. Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт обновлСния вСрсии А Π΄ΠΎ вСрсии Π’, достаточно ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ (ΠΈΠ»ΠΈ всС), ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ПО (git pull) ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚(Ρ‹) Π·Π°Π½ΠΎΠ²ΠΎ (create).

Под схСмой понимаСтся схСма Π‘Π” (создаваСмая ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ CREATE SCHEMA). Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² схСмы размСщаСтся Π² ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΌ схСмС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

ΠŸΠ°ΠΊΠ΅Ρ‚ - логичСскоС объСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… схСм. ΠœΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ схСмы.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ pgm

Π‘ΠΊΡ€ΠΈΠΏΡ‚ pgm Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Π‘Π” ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

  • init - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ .config ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ
  • init PKG - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²
  • create PKGS - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π‘Π”
  • creatif PKGS - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π‘Π”, Ссли ΠΈΡ… Π½Π΅Ρ‚
  • recreate PKGS - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π‘Π”, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΠ²
  • make PKGS - Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ (CREATE OR REPLACE) послС сдСланного Ρ€Π°Π½Π΅Π΅ create
  • drop PKGS - ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π² Π‘Π” (ΠΊΡ€ΠΎΠΌΠ΅ wsd)
  • erase PKGS - ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π±Π΄ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ wsd)
  • createdb - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π‘Π”
  • dump SCHEMA - Π΄Π°ΠΌΠΏ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ схСмы
  • restore SCHEMA - восстановлСниС Π΄Π°ΠΌΠΏΠ°

Π³Π΄Π΅

  • PKGS - список ΠΈΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² порядкС создания
  • SCHEMA - имя схСмы Π‘Π”

Π Π°Π±ΠΎΡ‚Π° скрипта Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° var/build/build.sql ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ Π² psql.

Struct

Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ SQL-ΠΊΠΎΠ΄Π°

SQL-ΠΊΠΎΠ΄ размСщаСтся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… схСмы

  • sql/PKG/NN_SCHEMA/ (NN - порядковый Π½ΠΎΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ схСмы ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°)
  • sql/PKG/ (Ссли SCHEMA=PKG)

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ схСмы содСрТит .sql Ρ„Π°ΠΉΠ»Ρ‹. Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ .sql Ρ„Π°ΠΉΠ»Π° - MM_descr.sql - Ρ„Π°ΠΉΠ» с Ρ‚ΠΈΠΏΠΎΠΌ MM ΠΈ описаниСм descr.

Ρ‚ΠΈΠΏ MM ΠΈΠΌΠ΅Π΅Ρ‚ значСния:

  • 00 - drop/erase: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ связСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ схСмы с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ схСмами
  • 01 - erase: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… схСм (wsd)
  • 02 - drop/erase: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ схСмы (02_drop)
  • 10 - init: инициализация Π΄ΠΎ создания схСмы
  • 11 - init: созданиС схСмы, послС выполнСния 11* имя схСмы ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° добавится Π² ΠΏΡƒΡ‚ΡŒ поиска
  • 12 - init: зависимости ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², созданиС Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² ΠΈ Ρ‚ΠΈΠΏΠΎΠ²
  • 1[4-9] - ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ для init ΠΈ make, ΠΊΠΎΠ΄, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ зависимостСй ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании Ρ‚Π°Π±Π»ΠΈΡ†
  • 2x - созданиС Ρ‚Π°Π±Π»ΠΈΡ†
  • 3x - Ρ„-ΠΈ для прСдставлСний
  • 4x - прСдставлСния
  • 5x - основной ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
  • 6x - ΠΊΠΎΠ΄ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ²
  • 7x - созданиС Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ²
  • 8x - Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†
  • 9x - тСсты

Π€Π°ΠΉΠ»Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² порядкС сортировки ΠΈΠΌΠ΅Π½.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ маскС:

  • init: [1-9]?_*.sql
  • make: 1[4-9]*.sql, [3-6]?.sql, 9?_.sql
  • drop: 00_.sql, 02_.sql
  • erase: 0?_*.sql

Код, ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ схСму wsd

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ измСнСния Π² схСмС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (wsd), Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π°Π΄Π°Ρ‡:

  • инициализация, созданиС Ρ‚Π°Π±Π»ΠΈΡ† Π² схСмС wsd (20_wsd_000.sql)
  • привязка ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² схСмС wsd (созданиС Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² - 8?_*_wsd_000.sql)
  • очистка схСмы wsd ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚Π° (01_drop_wsd.sql)
  • ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ связСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² схСмы wsd с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° (00_cleanup.sql)

Π—Π°Π΄Π°Ρ‡ΠΈ привязка ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ стандартном ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° (create ΠΈ drop соотвСтствСнно), очистка выполняСтся ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° (erase), Π° инициализация Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄ привязкой, которая производится Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΈΠ»ΠΈ послС очистки.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Π€Π°ΠΉΠ», содСрТащий ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΠΌΠ΅Π΅Ρ‚ Π² ΠΈΠΌΠ΅Π½ΠΈ суффикс _wsd_NNN.sql
  • ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° с Ρ‚Π°ΠΊΠΈΠΌ суффиксом (ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ create ), Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму) ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ wsd.pkg_script_protected
  • ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π² этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ create (послС drop) Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ запуск Π½Π΅ производится. ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы выводится ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± этом.
  • Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ строки ΠΈΠ· wsd.pkg_script_protected производится ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ erase pkg автоматичСски.

ОбновлСниС вСрсий

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π‘Π” позволяСт ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ всС схСмы Π‘Π” посрСдством Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ drop, git update, create. Π—Π°Π΄Π°Ρ‡Π° обновлСния схСмы wsd Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • ПослС установки Ρ€Π΅Π»ΠΈΠ·Π° прСкращаСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² *_wsd_000.sql
  • Для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ схСмы wsd ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, (*_wsd_001.sql ΠΈΡ‚Π΄)
  • ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ систСмы ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π‘Π” ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ

Зависимости ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Богласно принятой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, любой ΠΏΠ°ΠΊΠ΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² Π‘Π” послС Π½Π΅Π³ΠΎ. Π’.Π΅., Ссли Π΅ΡΡ‚ΡŒ pkg_B, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ (ΠΈΠ»ΠΈ ΠΊΠΎΠ΄) ΠΈΠ· pkg_A, Ρ‚ΠΎ pkg_A ΠΎΠ± этом Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ сущСствования ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹

  • Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ» установку pkg_B ΠΏΡ€ΠΈ отсутствии установлСнного pkg_A
  • Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ» ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ pkg_A ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ установлСнного pkg_B

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ рСализовываСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π² sql-ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠŸΠ°ΠΊΠ΅Ρ‚Π°_Π’ Ρ„Π°ΠΉΠ»Π° 12_deps.sql, содСрТащСго ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄Π°

INSERT INTO ws.pkg_required_by(code) VALUES ('ΠŸΠ°ΠΊΠ΅Ρ‚_А');

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² схСмах Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, справочники Ρ„Π°ΠΉΠ»-сСрвСра). Π’.Π΅. Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π°

  1. pkg_A создаСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ wsd.T1, которая ссылаСтся Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° pkg_A.T2 внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ FK1

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΠ°ΠΊΠ΅Ρ‚ FS создаСт wsd.file_link, поля ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ (class_id, folder_code) REFERENCES fs.folder(class_id, code)
  1. pkg_B для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с wsd.T1 добавляСт строки Π² pkg_A.T2

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΠ°ΠΊΠ΅Ρ‚ wiki добавляСт Π² fs.folder(class_id, code) VALUES (12, 'files') - ΠΏΠ°ΠΏΠΊΡƒ для Ρ„Π°ΠΉΠ»ΠΎΠ² wiki
    1. Π’ процСссС эксплуатации происходит Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ wsd.Π’1

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ вопросы

  • ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π»ΠΈ внСшний ΠΊΠ»ΡŽΡ‡ FK1, Ссли ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ pkg_A ΠΈΠ»ΠΈ pkg_B, Π½ΠΎ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ Π² wsd.T1?
  • ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΠΈ внСшний ΠΊΠ»ΡŽΡ‡ FK1 ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ создании pkg_A ΠΈΠ»ΠΈ pkg_B?

Π­Ρ‚ΠΈ вопросы Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • рСгистрируСтся Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ pkg_B ΠΎΡ‚ pkg_A
INSERT INTO ws.pkg_required_by(code) VALUES ('fs');

, Ρ‡Π΅ΠΌ запрСщаСтся:

  • созданиС pkg_B ΠΏΡ€ΠΈ отсутствии pkg_A

  • ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ pkg_A ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ pkg_B

  • pkg_A Π½Π΅ создаСт внСшний ΠΊΠ»ΡŽΡ‡ FK1, Π° рСгистрируСт Π΅Π³ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ wsd.pkg_fkey_protected

INSERT INTO wsd.pkg_fkey_protected (rel, wsd_rel, wsd_col) VALUES
  ('fs.folder', 'file_link',  'class_id, folder_code')
;
  • рСгистрируСтся Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… pkg_B ΠΎΡ‚ внСшнСго ΠΊΠ»ΡŽΡ‡Π° pkg_A
INSERT INTO wsd.pkg_fkey_required_by (pkg, rel) VALUES ('fs','fs.folder');

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ внСшний ΠΊΠ»ΡŽΡ‡ FK1

  • удаляСтся ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΆΠ΅ зависящСго ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
  • ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² wsd, создаСтся послС создания всСх зависящих ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Π’.Π΅. ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ pkg_B ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ строки ΠΈΠ· pkg_A.T2, Π° ΠΏΡ€ΠΈ создании - Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ:

  • ПослС создания ΠΏΠ°ΠΊΠ΅Ρ‚Π° - ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ всС Π΅Ρ‰Π΅ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ зарСгистрированныС FK присоСдинСнных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Ρ‚Π°Π±Π»ΠΈΡ†
  • ΠŸΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π° - ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ всС зарСгистрированныС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ зависимости FK

ЗначСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Π‘ΠΎ значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°, аналогичная внСшним ΠΊΠ»ΡŽΡ‡Π°ΠΌ:

  1. pkg_A создаСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ wsd.T1, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»Π΅ F1 ΠΈΠΌΠ΅Π΅Ρ‚ DEFAULT - Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° pkg_C

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π°Π±Π»ΠΈΡ†Π° acc.permission ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»Π΅ pkg DEFAULT ws.pg_pkg()

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ вопросы

  • Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ удалСния поля F1 ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ схСмы pkg_C?
  • Как Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ DEFAULT ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ создании ΠΏΠ°ΠΊΠ΅Ρ‚Π° pkg_C?

Π­Ρ‚ΠΈ вопросы Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • pkg_A Π½Π΅ Π·Π°Π΄Π°Π΅Ρ‚ DEFAULT, Π° рСгистрируСт Π΅Π³ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ wsd.pkg_default_protected
INSERT INTO wsd.pkg_default_protected (pkg, schema, wsd_rel, wsd_col, func) VALUES ('acc', 'acc', 'permission', 'pkg', 'ws.pg_pkg()');

, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого

  • ПослС создания ΠΏΠ°ΠΊΠ΅Ρ‚Π°, этот DEFAULT создаСтся автоматичСски
  • ΠŸΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, DEFAULT автоматичСски удаляСтся.

ВСсты

ВСсты Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π°Ρ… 9?_*.sql ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ init ΠΈ make. Π’Ρ‹Π²ΠΎΠ΄ тСста сравниваСтся с содСрТимым Ρ„Π°ΠΉΠ»Π° 9?_*.md ΠΈ ΠΏΡ€ΠΈ нСсовпадСнии Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка.

НаличиС ошибок тСстов отмСняСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ основной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

ИмСнованиС тСстов 9X_name.sql.

НомСр Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ порядок выполнСния. Π’ тСстах ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π²Π°ΠΆΠ΅Π½, поэтому всС ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ прСфикс "90_". 91 ΠΈΠ»ΠΈ 92 - это Π½ΠΈ ΠΎ Ρ‡Π΅ΠΌ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚. Π’ Ρ„Π°ΠΉΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ тСстируСтся. Бмысл тСста оформляСтся ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ Ρ„Ρ€Π°Π·ΠΎΠΉ Π² Π»Π°Ρ‚ΠΈΠ½Π½ΠΈΡ†Π΅ (DESCRIPTION) Π² соотвСтствии с Ρ‚ΠΈΠΏΠΎΠΌ ws.d_code ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ Π΄Π²Π°ΠΆΠ΄Ρ‹:

  1. Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° - 90_DESCRIPTION.sql
  2. Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π°, написав SELECT ws.test('DESCRIPTION');

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π΄Π΅Π»ΠΈΡ‚ΡŒ 9Π₯ Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ смыслом, Π΅ΡΡ‚ΡŒ рСкомСндация: НомСр 90 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для тСстов, Π½Π΅ связанных с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ наличия Π² Π‘Π” Π΄Π°Π½Π½Ρ‹Ρ… (ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ), 91 - для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности Π΄Π°Π½Π½Ρ‹Ρ… Π² Π‘Π”.

Macro для тСстов.

Если ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π½Π°Π΄ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² тСстС нСсколько Ρ€Π°Π· с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, этот ΠΊΠΎΠ΄ помСщаСтся Π² 9X_name.macro.sql ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² тСстС:

\set FILE :TEST .macro.sql
\set VAR 1
\i :FILE

\set VAR 2
\i :FILE

ΠžΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ тСстов

Как ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Ρ„Π°ΠΉΠ»Ρ‹ 9?_*.md ΠΈΠΌΠ΅ΡŽΡ‚ синтаксис markdown. Π’ этот Ρ„Π°ΠΉΠ» ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ

  • названия тСстов
  • тСксты SQL-запросов
  • Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ SQL-запросов

Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Ρ€ΡƒΠΊΠ°ΠΌΠΈ, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС pgm Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» Π² var/build/PKG/ ΠΈ, Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ тСста ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌ, достаточно ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² sql/PKG/.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ 9?_*.md Π±Ρ‹Π» сгСнСрирован ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΏΡ€ΠΈ создании тСста 9?_*.sql ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  1. Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ; -- BOT (Begin Of Test)

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой запрос, Π½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π²ΠΈΠ΄Π° SELECT ws.test('TITLE'); -- BOT, эта функция Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ TITLE, Π½ΠΎ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ RAISE WARNING Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ pgm ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° Π² консоли ΠΈΠΌΠ΅Π½ΠΈ выполняСмого тСста.

  1. ДокумСнтируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ запрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ; -- EOT (End Of Test)

ВСкст этого запроса форматируСтся ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ SQL, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ - ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² markdown. Π’.ΠΊ. тСкст запроса сохраняСтся ΠΊΠ°ΠΊ "Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€ запроса psql", Π² Π½Π΅Π³ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ многострочныС SQL-ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ (Π²ΠΈΠ΄Π° /* .. */). Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ этого Π±ΡƒΡ„Π΅Ρ€Π° psql сбрасываСт послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса, Π½ΠΎ Ссли послС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ запроса Π΅ΡΡ‚ΡŒ многострочный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Π² .md, достаточно послС Π½Π΅Π³ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ запроса (инструкциСй \r).

.config

pgm ΠΏΡ€ΠΈ запускС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» `.config' ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

DB_NAME=iac1
PG_HOST=127.0.0.1
PG_PORT=5432

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ этого Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠ»Π½Ρ‹ΠΌ списком ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Ρ€Π΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ bash pgm.sh init

TODO

  • ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΠ· pkg_script_protected ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°

  • Π²Ρ‹Π»Π΅Ρ‚Π°Ρ‚ΡŒ ΠΏΠΎ ошибкС Ссли Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ drop/create Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²

  • Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ test

  • Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ bench

  • пСрСнСсти ΠΊΠΎΠ΄ Π² ΠΈΠ· ws Π² pgm

  • sql/upd - ΠΊΠΎΠ΄ обновлСния вСрсий:

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π½ΠΎΠΌΠ΅Ρ€Ρƒ обновлСния(вСрсии)

NNN/ - ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ обновлСния MM-* - Ρ„Π°ΠΉΠ» с ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π€Π°ΠΉΠ»Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² порядкС сортировки ΠΈΠΌΠ΅Π½, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ.

Π‘ΠΌ Ρ‚Π°ΠΊΠΆΠ΅

License

This project is licensed under the terms of the MIT license. See the LICENSE file for the full license text.

Copyright (c) 2010 - 2017 Tender.Pro

Packages

No packages published

Contributors 3

  •  
  •  
  •