рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдЬреНрдЮрд╛рдд рдЬрд╛рдирд╡рд░ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╖реНрдард╛ рд╣реИред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддрд░рд╣, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ (RDBMS) рд╕реЗ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рдЖрддреА рд╣реИрдВред
рдПрдХ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рд╕реАрдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡реНрдпрдВрдЬрди рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдХрдВрдХрд╛рд▓, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЪреБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА PostgreSQL рдбреЗрдЯрд╛ рд╕реНрдХреАрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ pgTAP:
github.com/C-Pro/pg_skeleton рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдФрд░ рдПрдХ рд╕реБрдЦрдж рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЯреНрд░реИрд╡рд┐рд╕ рдХреЛ рдпрд╣ рдмрд╛рдд рдмрддрд╛рдИ, рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рднреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА CI рд╣реЛ :)

рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- PostgreSQL> = 9.2 рджреЗрд╡ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде (рдЖрдкрдХреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛)
- pgTAP (рд╕реНрд╡рдпрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди)
- рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП pg_prove рдХрд░реЗрдВ
рддреЛ, рдХреНрд░рдо рдореЗрдВ:
рдпрджрд┐ PostgreSQL рдЕрднреА рддрдХ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ - рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдмрдВрдЯреВ рдпрд╛ рдбреЗрдмрд┐рдпрди рд╣реИ, рддреЛ рдореИрдВ рдЙрдирдХреЗ apt.postgresql.org рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ (рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ:
wiki.postgresql.org/wiki/Apt )ред рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ - рдЙрдмрдВрдЯреВ 13 рдкрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рдПрд▓рдЯреАрдПрд╕ рд░рд┐рд▓реАрдЬ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
PgTAP рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ - PostgreSQL рдореЗрдВ рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛:
pgtap.orgрд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ, рдлрд┐рд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣:
make && sudo make install
Pgtap рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрдм рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
PgTpro рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП pg_prove - perl рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
sudo cpan TAP::Parser::SourceHandler::pgTAP
рд╕рдм рдХреБрдЫ, рдЖрдк pg_skeleton рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
git clone https://github.com/C-Pro/pg_skeleton.git cd pg_skeleton cp install.cfg.example install.cfg ./install.sh
рдпрд╣ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдЧрд╛ - рдирд┐рд░реНрдорд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдорд╛рд▓рд┐рдХ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ:
cd test ./run_tests.sh
рдпрджрд┐ рдЖрдкрдиреЗ рдЬрд╛рджреВ рд╢рдмреНрдж PASS рджреЗрдЦрд╛ - рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣рдбреНрдбрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрдВрдХрд╛рд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдлрд╛рдЗрд▓ рд╕реЗред
- .itignore - рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛ - рдлрд╝рд╛рдЗрд▓ рдорд╛рд╕реНрдХ рдХреА рдПрдХ рд╕реВрдЪреА рдЬрд┐рд╕реЗ git рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- .travis.yml - рдЯреНрд░реИрд╡рд┐рд╕ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдЬрд╛рдПрдВред рдЬрдм рдореИрдВ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдзрдХреНрдХрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдЯреНрд░реИрд╡рд┐рд╕ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рдЯреНрд░реИрд╡рд┐рд╕ рдмрд┐рд▓реНрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: travis-ci.org/C-Pro/pg_skeleton# рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдмрд┐рд▓реНрдб рд╣рд┐рд╕реНрдЯреНрд░реА рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧрд┐рдЯ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдЯреНрд░реИрд╡рд┐рд╕, рдПрдХреНрд╕рдЯреЗрдВрд╢рди, pg_prove рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдкреАрдбрд╝рд╛ рджреЗрдиреА рдереАред
- create_db.sql - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛
- drop_db.sql - рдкреИрд░рд╛рдореАрдЯрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд▓реЛрдкрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ
- Extension.sql - рд╕реНрдХреАрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ
- install.cfg - settings: рд╕рд░реНрд╡рд░ рдПрдбреНрд░реЗрд╕, рдирд┐рд░реНрдорд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЧрд┐рдЯ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдорд╢реАрди рдореЗрдВ рддреИрдирд╛рдд рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд░реЛрдз рдХреЗ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ред
- install.cfg.example - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ
- install.sql - sql рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдХреАрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рднреА рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
- uninstall.sh - рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП
рдкреНрд░рддреНрдпреЗрдХ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕реНрдХреАрдорд╛ рдХреЗ рд▓рд┐рдП рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИред
Test_user рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде test_user рд╕реНрдХреАрдорд╛ (рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдХреАрдорд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВред
- create_tables.sql - рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреАрдо рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдРрд╕реА рдлрд╛рдЗрд▓ рд╣реЛрддреА рд╣реИред рдЗрд╕рдореЗрдВ рд╕реНрдХреАрдорд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП DDL рд╣реИред
- create_functions.sql - рд╕реНрдХреАрдорд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдпреБрдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯред
- users_crud.sql - рдХрдИ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ create_functions.sql рдлрд╝рд╛рдЗрд▓ рдореЗрдВ \ i рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ (рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)ред
рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╡рд┐рднрд╛рдЬрди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирд╕реЛрдВ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ, рд╡рд┐рджреЗрд╢реА рдмрд╛рдзрд╛рдУрдВ, рдХрд╛рд░реНрдпреЛрдВ, рд╡рд┐рдЪрд╛рд░реЛрдВ рдЖрджрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдиреНрдпреЛрдиреНрдпрд╛рд╢реНрд░рд┐рддрд┐рдпреЛрдВ рдХреЗ рдЬрд╛рд▓ рдореЗрдВ рдЧрд┐рд░рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ install.sql рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
create table a (x int references by); create table b (y int references ax);
рдЯреЗрд╕реНрдЯ рдлреЛрд▓реНрдбрд░ рдПрдХ рд╕реНрдХреАрдорд╛ рднреА рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдХреАрдорд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдЪрд▓рддрд╛ рд╣реИ рдЬрдм рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВред
setup.sql рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдЕрд╕реНрдерд╛рдпреА рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдПрдл-рд╡реЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (рдЙрд╣, рдХрд┐рддрдиреЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг :)
run_tests.sh, pg_prove рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ ред/tests/run_<name>.b рдПрдХ-рдПрдХ рдХрд░рдХреЗ
run_ <name> .sh рдХреЛ рдкреНрд░рддрд┐ рдпреЛрдЬрдирд╛ рдПрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, setup.sql рдлрд╝рд╛рдЗрд▓ рдЙрдирд╕реЗ рдЬреБрдбрд╝реА рд╣реИ - рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди test.test_scheme_check_func рдФрд░ рдлрд╝рд╛рдЗрд▓ test_data.sh рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ред рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╕ run_ <name> .sh рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВред рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рдж, test.test_scheme_check_func рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ f-th рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ pgTAP рдкрд░реАрдХреНрд╖рдг рд╣реИ, рдЬреЛ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдЧреИрд░-рдХрд╡рд░ рдПрдл-рдЯреА рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдкрд░реАрдХреНрд╖рдг рдХреА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рдПрдХ рд╣реА рдирд╛рдо рд╡рд╛рд▓реА рдУрд╡рд░рд▓реЛрдб рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЯреЗрд╕реНрдЯ рдХрд╡рд░реЗрдЬ рдкрд░ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд░реЛрд▓рдмреИрдХ рд╣реЛрддрд╛ рд╣реИ - рд╕рднреА рдирд┐рд░реНрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЦреИрд░, рдЕрдм рд╢рд╛рдпрдж рдпрд╣реА рд╣реИред
рдореБрдЭреЗ рдкрд╢реНрдЪрд╛рддрд╛рдк рд╣реБрдЖ, рдпрд╣ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЧрдпрд╛ - рдкреВрдЫрд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ, рд╕рдордЭ, рдХрд╛рдВрдЯрд╛!