SQL, рдХрд╛рдп рд╕реЛрдкреЗ рдЕрд╕реВ рд╢рдХрддреЗ? рдЖрдкрд▓реНрдпрд╛рдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдПрдХ рд╕рд╛рдзреА рд╡рд┐рдирдВрддреА рд▓рд┐рд╣реВ рд╢рдХрддреЛ - рдЖрдореНрд╣реА рдЯрд╛рдЗрдк рдХрд░рддреЛ рдирд┐рд╡рдбрд╛, рдирдВрддрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реНрддрдВрднрд╛рдВрдЪреА рдпрд╛рджреА рдХрд░рд╛ рдЖрд░реЛрдЧреНрдпрд╛рдкрд╛рд╕реВрди , рдЯреЗрдмрд▓ рдирд╛рд╡, рдХрд╛рд╣реА рдЕрдЯреА рдордзреНрдпреЗ рдЬреЗрдереЗ рдЖрдгрд┐ рдЗрддрдХреЗрдЪ рдЖрд╣реЗ - рдЙрдкрдпреБрдХреНрдд рдбреЗрдЯрд╛ рдЖрдордЪреНрдпрд╛ рдЦрд┐рд╢рд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ (рдЬрд╡рд│рдЬрд╡рд│) рддреНрдпрд╛ рд╡реЗрд│реА рдХреЛрдгрддрд╛ DBMS рд╣реБрдбрдЦрд╛рд▓реА рдЖрд╣реЗ рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛ (рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд
рдЖрдгрд┐ рдЖрддрд╛рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛
рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдореЕрдкрд┐рдВрдЧ
ORM рд╕рдорд░реНрдердХ рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХрдкрдгреЗ рдЧрддреА рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рд╛рдЪреА рд╕реБрд▓рднрддрд╛, DBMS рдкрд╛рд╕реВрди рд╕реНрд╡рд╛рддрдВрддреНрд░реНрдп рдЖрдгрд┐ рд╕реНрд╡рдЪреНрдЫ рдХреЛрдбрд▓рд╛ рдорд╣рддреНрддреНрд╡ рджреЗрддрд╛рдд. рдЖрдкрд▓реНрдпрд╛рдкреИрдХреА рдмрд░реНтАНрдпрд╛рдЪ рдЬрдгрд╛рдВрд╕рд╛рдареА, рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб (рдЖрдгрд┐ рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрд╡рддрдГ)
рд╣реЗ рд╕рд╣рд╕рд╛ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рддреЗ ...
@Entity
@Table(name = "stock", catalog = "maindb", uniqueConstraints = {
@UniqueConstraint(columnNames = "STOCK_NAME"),
@UniqueConstraint(columnNames = "STOCK_CODE") })
public class Stock implements java.io.Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "STOCK_ID", unique = true, nullable = false)
public Integer getStockId() {
return this.stockId;
}
...
рдореЙрдбреЗрд▓ рд╣реБрд╢рд╛рд░ рднрд╛рд╖реНрдпрд╛рдВрд╕рд╣ рдЯрд╛рдВрдЧрд▓реЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдкрдбрджреНрдпрд╛рдорд╛рдЧреЗ рдХреБрдареЗрддрд░реА рдПрдХ рд╢реВрд░ ORM рдХрд╛рд╣реА SQL рдХреЛрдб рддрдпрд╛рд░ рдХрд░рддреЛ рдЖрдгрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЛ. рддрд╕реЗ, рд╡рд┐рдХрд╕рдХ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдкрд╛рд╕реВрди рдХрд┐рд▓реЛрдореАрдЯрд░реНрд╕рдЪреНрдпрд╛ рдЕтАНреЕрдмреНрд╕реНрдЯреНрд░реЕрдХреНрд╢рдирд╕рд╣ рд╕реНрд╡рддрдГрд▓рд╛ рд╡реЗрдЧрд│реЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЗрдд, рдЬреЗ рдХрд╛рд╣реА рд╕реВрдЪрд┐рдд рдХрд░рддрд╛рдд
рдмреЕрд░рд┐рдХреЗрдбреНрд╕рдЪреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рдмрд╛рдЬреВрд▓рд╛, рд╢реБрджреНрдз тАЬрд╣рд╛рддрдирд┐рд░реНрдорд┐рддтАЭ SQL рдЪреЗ рдЕрдиреБрдпрд╛рдпреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ DBMS рдордзреВрди рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрддрд░ рдЖрдгрд┐ рдЕтАНреЕрдмреНрд╕реНрдЯреНрд░реЕрдХреНрд╢рдирд╢рд┐рд╡рд╛рдп рд╕рд░реНрд╡ рд░рд╕ рдкрд┐рд│реВрди рдХрд╛рдврдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛рдд. рдкрд░рд┐рдгрд╛рдореА, "рдбреЗрдЯрд╛-рдХреЗрдВрджреНрд░рд┐рдд" рдкреНрд░рдХрд▓реНрдк рджрд┐рд╕рддрд╛рдд, рдЬреЗрдереЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд▓реЛрдХ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдЧреБрдВрддрд▓реЗрд▓реЗ рдЕрд╕рддрд╛рдд (рддреЗ "рдореВрд▓рднреВрддрд╡рд╛рджреА" рджреЗрдЦреАрд▓ рдЕрд╕рддрд╛рдд, рддреЗ "рдореВрд▓рднреВрддрд╡рд╛рджреА" рджреЗрдЦреАрд▓ рдЕрд╕рддрд╛рдд, рддреЗ "рдмреЗрд╕рдбреЗрдирд░реНрд╕" рдЗ.) рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рдХ рджреЗрдЦреАрд▓ рдЕрд╕рддрд╛рдд. рддрдкрд╢рд┐рд▓рд╛рдд рди рдЬрд╛рддрд╛ рдлрдХреНрдд рд░реЗрдбреАрдореЗрдб рджреГрд╢реНрдпреЗ рдЖрдгрд┐ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ "рдкреБрд▓" рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓.
рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрдиреНрд╣реА рдЬрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрд╕реЗрд▓ рддрд░? рдЬреАрд╡рдирд╛рдЪреА рдкреБрд╖реНрдЯреА рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдирд╛рд╡рд╛рд╕рд╣ рд╣реЗ рдПрдХрд╛ рдЕрджреНрднреБрдд рд╕рд╛рдзрдирд╛рдд рдХрд╕реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ
DSL рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Clojure рд╣реА рдПрдХ рдЫрд╛рди рднрд╛рд╖рд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ SQL рд╕реНрд╡рддрдГрдЪ рдПрдХ рдЫрд╛рди DSL рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рджреБрд╕рд░реА рдЧрд░рдЬ рдирд╛рд╣реА. рдПрд╕-рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдЙрддреНрддрдо рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреЗ рдпреЗрдереЗ рдХрд╛рд╣реАрд╣реА рдирд╡реАрди рдЬреЛрдбрдд рдирд╛рд╣реАрдд. рдкрд░рд┐рдгрд╛рдореА, рдЖрдореНрд╣рд╛рд▓рд╛ рдХрдВрд╕рд╛рдЪреНрдпрд╛ рдлрд╛рдпрджреНрдпрд╛рд╕рд╛рдареА рдХрдВрд╕ рдорд┐рд│рддрд╛рдд. рдорд╛рдиреНрдп рдирд╛рд╣реА? рдордЧ рддреНрдпрд╛ рдХреНрд╖рдгрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛ рдЬреЗрд╡реНрд╣рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╡рд░реАрд▓ рдЕтАНреЕрдмреНрд╕реНрдЯреНрд░реЕрдХреНрд╢рди рд▓реАрдХ рд╣реЛрдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рд╣реЛрддреЗ рдЖрдгрд┐ рддреБрдореНрд╣реА рдлрдВрдХреНрд╢рдирд╢реА рд▓рдврд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рддрд╛. (raw-sql)
рдордЧ рдореА рдХрд╛рдп рдХрд░реВ? рдПрд╕рдХреНрдпреВрдПрд▓рд▓рд╛ рдирд┐рдпрдорд┐рдд рдПрд╕рдХреНрдпреВрдПрд▓ рдореНрд╣рдгреВрди рд╕реЛрдбреВ рдпрд╛ - рдкреНрд░рддрд┐ рд╡рд┐рдирдВрддреА рдПрдХ рдлрд╛рдЗрд▓:
-- name: users-by-country
select *
from users
where country_code = :country_code
... рдЖрдгрд┐ рдирдВрддрд░ рд╣реА рдлрд╛рдИрд▓ рд╡рд╛рдЪрд╛, рддреА рдирд┐рдпрдорд┐рдд рдХреНрд▓реЛрдЬрд░ рдлрдВрдХреНрд╢рдирдордзреНрдпреЗ рдмрджрд▓реВрди:
(defqueries "some/where/users_by_country.sql"
{:connection db-spec})
;;; A function with the name `users-by-country` has been created.
;;; Let's use it:
(users-by-country {:country_code "GB"})
;=> ({:name "Kris" :country_code "GB" ...} ...)
"рд╕реНрд╡рддрдГрдЪ рдПрд╕рдХреНрдпреВрдПрд▓, рд╕реНрд╡рддрдГ рдХреНрд▓реЛрдЬрд░" рддрддреНрддреНрд╡рд╛рдЪреЗ рдкрд╛рд▓рди рдХрд░реВрди, рддреБрдореНрд╣рд╛рд▓рд╛ рдорд┐рд│рддреЗ:
- рдХреЛрдгрддреАрд╣реА рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХ рдирд╛рд╣реА. рддреБрдордЪрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ (рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдорд╛рдгреЗ) SQL рдорд╛рдирдХрд╛рд╢реА резрежреж% рдЕрдиреБрд░реВрдк рдирд╛рд╣реА - рдкрд░рдВрддреБ Yesql рд╕рд╛рдареА рд╣реЗ рдХрд╛рд╣реА рдлрд░рдХ рдкрдбрдд рдирд╛рд╣реА. SQL рд╕рдорддреБрд▓реНрдп рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдлрдВрдХреНрд╢рдиреНрд╕рдЪреНрдпрд╛ рд╢реЛрдзрд╛рдд рддреБрдореНрд╣реА рдХрдзреАрд╣реА рд╡реЗрд│ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡рдгрд╛рд░ рдирд╛рд╣реА. рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдзреАрд╣реА рдлрдВрдХреНрд╢рдирд╡рд░ рдкрд░рдд рдЬрд╛рд╡реЗ рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА (raw-sql "some('funky'::SYNTAX)")).
- рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрдкрд╛рджрдХ рд╕рдорд░реНрдерди. рддреБрдордЪреНрдпрд╛ рд╕рдВрдкрд╛рджрдХрд╛рд▓рд╛ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рдЙрддреНрдХреГрд╖реНрдЯ SQL рд╕рдкреЛрд░реНрдЯ рдЖрд╣реЗ. SQL рдореНрд╣рдгреВрди SQL рд╕реЗрд╡реНрд╣ рдХрд░реВрди рддреБрдореНрд╣реА рддреЗ рд╕рд╣рдЬрдкрдгреЗ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
- рд╕рдВрдШ рд╕реБрд╕рдВрдЧрддрддрд╛. рддреБрдордЪреЗ DBA рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ Clojure рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реЗ SQL рд╡рд╛рдЪреВ рдЖрдгрд┐ рд▓рд┐рд╣реВ рд╢рдХрддрд╛рдд.
- рд╕реЛрдкреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдЯреНрдпреВрдирд┐рдВрдЧ. рд╕рдорд╕реНрдпрд╛рдкреНрд░рдзрд╛рди рдХреНрд╡реЗрд░реАрд╕рд╛рдареА рдпреЛрдЬрдирд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ? рддреБрдордЪреА рдХреНрд╡реЗрд░реА рдирд┐рдпрдорд┐рдд SQL рдЕрд╕рддреЗ рддреЗрд╡реНрд╣рд╛ рд╣реА рд╕рдорд╕реНрдпрд╛ рдирд╕рддреЗ.
- рдХреНрд╡реЗрд░реА рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░рдд рдЖрд╣реЗ. рддреНрдпрд╛рдЪ SQL рдлрд╛рдЗрд▓реНрд╕ рдЗрддрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдбреНрд░реЕрдЧ рдХрд░рд╛ рдЖрдгрд┐ рдбреНрд░реЙрдк рдХрд░рд╛ рдХрд╛рд░рдг рддреЗ рдЕрдЧрджреА рд╕рд╛рдзреЗ рдЬреБрдиреЗ SQL рдЖрд╣реЗ - рдлрдХреНрдд рддреЗ рд╢реЗрдЕрд░ рдХрд░рд╛.
рдорд╛рдЭреНрдпрд╛ рдорддреЗ, рдХрд▓реНрдкрдирд╛ рдЦреВрдк рдЫрд╛рди рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдЕрдЧрджреА рд╕реЛрдкреА рдЖрд╣реЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдкреНрд░рдХрд▓реНрдкрд╛рдиреЗ рдмрд░реЗрдЪ рдХрд╛рд╣реА рдорд┐рд│рд╡рд▓реЗ рдЖрд╣реЗ
IDE рдЖрдгрд┐ DB рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ
рдЪрд▓рд╛ рдПрдХрд╛ рд╕рд╛рдзреНрдпрд╛ рджреИрдирдВрджрд┐рди рдХрд╛рдорд╛рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛. рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдХрд╛рд╣реА рд╡рд╕реНрддреВ рд╢реЛрдзрд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕реНрдХреАрдорд╛рдордзреНрдпреЗ рдПрдХ рдЯреЗрдмрд▓ рд╢реЛрдзрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рд░рдЪрдирд╛ (рдХреЛрдгрддреЗ рд╕реНрддрдВрдн, рдХреА, рдЗрдВрдбреЗрдХреНрд╕, рдорд░реНрдпрд╛рджрд╛ рдЗ. рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд) рдпрд╛рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рд╛. рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреНрд░рд╛рдлрд┐рдХрд▓ IDE рдХрд┐рдВрд╡рд╛ рдереЛрдбреНрдпрд╛ DB-рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рдХрдбреВрди, рд╕рд░реНрд╡ рдкреНрд░рдердо, рдЖрдореНрд╣реА рдпрд╛ рдХреНрд╖рдорддрд╛рдВрдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЛ. рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рдЬрд▓рдж рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХ рдорд╛рд╣рд┐рддреА рдЕрд╕рд▓реЗрд▓реА рд╡рд┐рдВрдбреЛ (рд╡рд┐рд╢реЗрд╖рдд: рд░рд┐рдореЛрдЯ рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рдзреАрдореЗ рдХрдиреЗрдХреНрд╢рдирд╕рд╣) рддрдпрд╛рд░ рд╣реЛрдИрдкрд░реНрдпрдВрдд рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд░реНрдзрд╛ рддрд╛рд╕ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓реА рдорд╛рд╣рд┐рддреА рддрд╛рдЬреА рдЖрдгрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕реЗрд▓, рдЖрдгрд┐ рдХреЕрд╢реЗ рдЬрдВрдХ рдирд╛рд╣реА. рд╢рд┐рд╡рд╛рдп, рдбреЗрдЯрд╛рдмреЗрд╕ рдЬрд┐рддрдХрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЖрдгрд┐ рдореЛрдард╛ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЬрд╛рд╕реНрдд рдЕрд╕реЗрд▓ рддрд┐рддрдХреЗ рд╣реЗ рдХрд░рдгреЗ рдЕрдзрд┐рдХ рдХрдареАрдг рдЖрд╣реЗ.
рдкрдг рд╕рд╣рд╕рд╛ рдореА рдЙрдВрджреАрд░ рдлреЗрдХреВрди рджреЗрддреЛ рдЖрдгрд┐ рдлрдХреНрдд рдХреЛрдб рд▓рд┐рд╣рд┐рддреЛ. рд╕рдордЬрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ "рдПрдЪрдЖрд░" рд╕реНрдХреАрдорд╛рдордзреНрдпреЗ рдХреЛрдгрддреА рдЯреЗрдмрд▓реНрд╕ (рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛ рдЧреБрдгрдзрд░реНрдорд╛рдВрд╕рд╣) рдЖрд╣реЗрдд рд╣реЗ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рдмрд░реНтАНрдпрд╛рдЪ DBMS рдордзреНрдпреЗ, рдорд╛рд╣рд┐рддреА_рд╕реНрдХреАрдорд╛рдЪреНрдпрд╛ рдпрд╛ рд╕реЛрдкреНрдпрд╛ рдХреНрд╡реЗрд░реАрд╕рд╣ рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ:
select table_name
, ...
from information_schema.tables
where schema = 'HR'
рдбреЗрдЯрд╛рдмреЗрд╕рдкрд╛рд╕реВрди рдбреЗрдЯрд╛рдмреЗрд╕рдкрд░реНрдпрдВрдд, рдкреНрд░рддреНрдпреЗрдХ DBMS рдЪреНрдпрд╛ рдХреНрд╖рдорддреЗрдиреБрд╕рд╛рд░ рдЕрд╢рд╛ рд╕рдВрджрд░реНрдн рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪреА рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддреЗ. рдЖрдгрд┐, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, MySQL рд╕рд╛рдареА, рддреНрдпрд╛рдЪ рд╕рдВрджрд░реНрдн рдкреБрд╕реНрддрдХрд╛рддреВрди рддреБрдореНрд╣реА рдпрд╛ DBMS рд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрдмрд▓ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛:
select table_name
, storage_engine -- ╨Ш╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╨╝╤Л╨╣ "╨┤╨▓╨╕╨╢╨╛╨║" ("MyISAM", "InnoDB" etc)
, row_format -- ╨д╨╛╤А╨╝╨░╤В ╤Б╤В╤А╨╛╨║╨╕ ("Fixed", "Dynamic" etc)
, ...
from information_schema.tables
where schema = 'HR'
рдУрд░реЕрдХрд▓рд▓рд╛ тАЛтАЛрдорд╛рд╣рд┐рддреА_рд╕реНрдХреАрдорд╛ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдЖрд╣реЗ
select table_name
, pct_free -- ╨Ь╨╕╨╜╨╕╨╝╤Г╨╝ ╤Б╨▓╨╛╨▒╨╛╨┤╨╜╨╛╨│╨╛ ╨╝╨╡╤Б╤В╨░ ╨▓ ╨▒╨╗╨╛╨║╨╡ ╨┤╨░╨╜╨╜╤Л╤Е (%)
, pct_used -- ╨Ь╨╕╨╜╨╕╨╝╤Г╨╝ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╨╝╨╛╨│╨╛ ╨╝╨╡╤Б╤В╨░ ╨▓ ╨▒╨╗╨╛╨║╨╡ ╨┤╨░╨╜╨╜╤Л╤Е (%)
, last_analyzed -- ╨Ф╨░╤В╨░ ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨│╨╛ ╤Б╨▒╨╛╤А╨░ ╤Б╤В╨░╤В╨╕╤Б╤В╨╕╨║╨╕
, ...
from all_tables
where owner = 'HR'
рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕ рдЕрдкрд╡рд╛рдж рдирд╛рд╣реА:
select name
, engine -- ╨Ш╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╨╝╤Л╨╣ "╨┤╨▓╨╕╨╢╨╛╨║" ("MergeTree", "Dictionary" etc)
, ...
from system.tables
where database = 'HR'
рдЕрд╕реЗрдЪ рдХрд╛рд╣реАрддрд░реА рдХреЕрд╕реЕрдиреНрдбреНрд░рд╛рдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ (рдЬреНрдпрд╛рдд рдЯреЗрдмрд▓рд╛рдВрдРрд╡рдЬреА рдХреЙрд▓рдо рдлреЕрдорд┐рд▓реА рдЖрдгрд┐ рд╕реНрдХреАрдорд╛рдРрд╡рдЬреА рдХреАрд╕реНрдкреЗрд╕ рдЖрд╣реЗрдд):
select columnfamily_name
, compaction_strategy_class -- ╨б╤В╤А╨░╤В╨╡╨│╨╕╤П ╤Б╨▒╨╛╤А╨║╨╕ ╨╝╤Г╤Б╨╛╤А╨░
, gc_grace_seconds -- ╨Т╤А╨╡╨╝╤П ╨╢╨╕╨╖╨╜╨╕ ╨╝╤Г╤Б╨╛╤А╨░
, ...
from system.schema_columnfamilies
where keyspace_name = 'HR'
рдЗрддрд░ рдмрд░реНтАНрдпрд╛рдЪ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╛рдареА, рддреБрдореНрд╣реА рддрддреНрд╕рдо рдкреНрд░рд╢реНрдирд╛рдВрд╕рд╣ рдпреЗрдК рд╢рдХрддрд╛ (рдЕрдЧрджреА рдореЛрдВрдЧреЛрдХрдбреЗ рджреЗрдЦреАрд▓ рдЖрд╣реЗ
рдЕрд░реНрдерд╛рдд, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЖрдкрдг рдХреЗрд╡рд│ рд╕рд╛рд░рдгреНрдпрд╛рдВрдмрджреНрджрд▓рдЪ рдирд╛рд╣реА рддрд░ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡рд╕реНрддреВрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡реВ рд╢рдХрддрд╛. рд╡реЗрд│реЛрд╡реЗрд│реА, рджрдпрд╛рд│реВ рд▓реЛрдХ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╛рдареА рдЕрд╕реЗ рдХреЛрдб рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЕрдмреНрд░рд╛ рд▓реЗрдЦрд╛рдВрдЪреНрдпрд╛ рдорд╛рд▓рд┐рдХреЗрдд "рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдбреЗрдЯрд╛рдмреЗрд╕реЗрд╕рдЪреЗ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдпреЗ" (
рдкрд░рд┐рдгрд╛рдореА, рдиреЗрд╡реНрд╣рд┐рдЧреЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рд╣реА рдкрджреНрдзрдд рдЕрдзрд┐рдХ рд▓рд╡рдЪрд┐рдХ рдЖрд╣реЗ, рдмрд░рд╛рдЪ рд╡реЗрд│ рд╡рд╛рдЪрд╡рддреЗ рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдлреЙрд░реНрдордордзреНрдпреЗ рдЕрдЪреВрдХ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреЛрд╕реНрдЯрдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╣ рдСрдкрд░реЗрд╢рдиреНрд╕
рдЖрдореНрд╣реА рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреВ рд╢реЛрдзрд▓реНрдпрд╛рдирдВрддрд░ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╣ рдХрд╛рд╣реАрддрд░реА рдЙрдкрдпреБрдХреНрдд рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ. рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХрдЪ, рдХреАрдмреЛрд░реНрдбрд╡рд░реВрди рдмреЛрдЯреЗ рди рдХрд╛рдврддрд╛.
рд╣реЗ рдЧреБрдкрд┐рдд рдирд╛рд╣реА рдХреА рдлрдХреНрдд рд╕рд╛рд░рдгреА рд╣рдЯрд╡рдгреЗ рдЬрд╡рд│рдЬрд╡рд│ рд╕рд░реНрд╡ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рд╕рдорд╛рди рджрд┐рд╕реЗрд▓:
drop table hr.persons
рдкрд░рдВрддреБ рдЯреЗрдмрд▓рдЪреНрдпрд╛ рдирд┐рд░реНрдорд┐рддреАрд╕рд╣ рддреЗ рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рдмрдирддреЗ. рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддрд╛рд╣реА DBMS (рдЕрдиреЗрдХ NoSQL рд╕рд╣) рдПрдХрд╛ рдХрд┐рдВрд╡рд╛ рджреБрд╕рд░реНтАНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд "рдЯреЗрдмрд▓ рддрдпрд╛рд░" рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдЕрдЧрджреА рдереЛрдбрд╛ рд╡реЗрдЧрд│рд╛ рдЕрд╕реЗрд▓ (рдирд╛рд╡, рд╕реНрддрдВрднрд╛рдВрдЪреА рд╕реВрдЪреА, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░), рдкрд░рдВрддреБ рдЗрддрд░ рддрдкрд╢реАрд▓ рдирд╛рдЯрдХреАрдпрд░рд┐рддреНрдпрд╛ рднрд┐рдиреНрди рдЕрд╕реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддрд╛рдд. рдЕрдВрддрд░реНрдЧрдд рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдЖрдгрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ DBMS рдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛. рдорд╛рдЭреЗ рдЖрд╡рдбрддреЗ рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгрдЬреЗ рдУрд░реЕрдХрд▓ рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рдирдордзреНрдпреЗ "рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░рд╛" рд╕рд┐рдВрдЯреЕрдХреНрд╕рд╕рд╛рдареА рдлрдХреНрдд "рдирдЧреНрди" BNF рдЖрд╣реЗрдд
рддрд╕реЗрдЪ, рдЕрдиреЗрдХ DBMS рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░рдЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд╕рддрд╛рдд рдЬреЗ рдЗрддрд░ DBMS рдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реАрдд. рд╢рд┐рд╡рд╛рдп, рдЖрдореНрд╣реА рдХреЗрд╡рд│ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╡рд░рдЪ рдирд╡реНрд╣реЗ рддрд░ рдбреАрдмреАрдПрдордПрд╕рд╡рд░ рджреЗрдЦреАрд▓ рдСрдкрд░реЗрд╢рди рдХрд░реВ рд╢рдХрддреЛ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреНрд░рдХреНрд░рд┐рдпрд╛ "рдХрд┐рд▓" рдХрд░рдгреЗ, рдХрд╛рд╣реА рдореЗрдорд░реА рдХреНрд╖реЗрддреНрд░ рдореЛрдХрд│реЗ рдХрд░рдгреЗ, рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдгреЗ, "рдХреЗрд╡рд│ рд╡рд╛рдЪрди" рдореЛрдбрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдгреЗ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА.
рдЖрддрд╛ рдереЛрдбреЗ рдХрд╛рдвреВ
рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╣ рдПрдХ рдЖрдХреГрддреА рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдордзреАрд▓ рд╡рд╕реНрддреВ рдЖрдгрд┐ рдХрдиреЗрдХреНрд╢рди рдПрдХрд╛ рд╕реБрдВрджрд░ рдЪрд┐рддреНрд░рд╛рдд рдкрд╛рд╣рдгреЗ рд╣реЗ рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ. рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддреАрд╣реА рдЧреНрд░рд╛рдлрд┐рдХрд▓ IDE, рд╕реНрд╡рддрдВрддреНрд░ "рдХрдорд╛рдВрдб рд▓рд╛рдЗрди" рдЙрдкрдпреБрдХреНрддрддрд╛, рд╡рд┐рд╢реЗрд╖ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╕рд╛рдзрдиреЗ рдЖрдгрд┐ рдореЙрдбреЗрд▓рд░ рд╣реЗ рдХрд░реВ рд╢рдХрддрд╛рдд. рддреЗ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА "рддреЗ рд╢рдХреНрдп рддрд┐рддрдХреЗ рдЪрд╛рдВрдЧрд▓реЗ" рдХрд╛рд╣реАрддрд░реА рдХрд╛рдврддреАрд▓ рдЖрдгрд┐ рддреБрдореНрд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рдордзреАрд▓ рдХрд╛рд╣реА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд┐рдВрд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕рдордзреАрд▓ рдЪреЗрдХрдмреЙрдХреНрд╕реЗрд╕рдЪреНрдпрд╛ рдорджрддреАрдиреЗ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╡рд░ рдереЛрдбрд╛рд╕рд╛ рдкреНрд░рднрд╛рд╡ рдЯрд╛рдХреВ рд╢рдХрддрд╛.
рдкрд░рдВрддреБ рд╣реА рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рд╕реЛрдкреА, рдЕрдзрд┐рдХ рд▓рд╡рдЪрд┐рдХ рдЖрдгрд┐ рдореЛрд╣рдХ рдЖрдгрд┐ рдЕрд░реНрдерд╛рддрдЪ рдХреЛрдбрдЪреНрдпрд╛ рдорджрддреАрдиреЗ рд╕реЛрдбрд╡рд┐рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдЬрдЯрд┐рд▓рддреЗрдЪреЗ рдЖрд░реЗрдЦрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЕрдиреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ (DOT, GraphML рдЗ.) рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдЪреЗ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдЦреБрд░рд▓реЗрд▓реЗ (GraphViz, PlantUML, Mermaid) рдЕрд╢рд╛ рд╕реВрдЪрдирд╛ рд╡рд╛рдЪреВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рд╡рд┐рд╡рд┐рдз рд╕реНрд╡рд░реВрдкрд╛рдВрдордзреНрдпреЗ рджреГрд╢реНрдпрдорд╛рди рдХрд░реВ рд╢рдХрддрд╛рдд. . рдмрд░рдВ, рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреАрд▓ рдХрдиреЗрдХреНрд╢рдирдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдХрд╢реА рдорд┐рд│рд╡рд╛рдпрдЪреА рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдЪ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ.
PlantUML рдЖрдгрд┐ рд╡рд╛рдкрд░реВрди рд╣реЗ рдХрд╕реЗ рджрд┐рд╕реВ рд╢рдХрддреЗ рдпрд╛рдЪреЗ рдПрдХ рд▓рд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рдпреЗрдереЗ рдЖрд╣реЗ
select '@startuml'||chr(10)||'hide methods'||chr(10)||'hide stereotypes' union all
select distinct ccu.table_name || ' --|> ' ||
tc.table_name as val
from table_constraints as tc
join key_column_usage as kcu
on tc.constraint_name = kcu.constraint_name
join constraint_column_usage as ccu
on ccu.constraint_name = tc.constraint_name
where tc.constraint_type = 'FOREIGN KEY'
and tc.table_name ~ '.*' union all
select '@enduml'
рдЖрдгрд┐ рдЖрдкрдг рдереЛрдбрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓реНрдпрд╛рд╕, рдирдВрддрд░ рдЖрдзрд╛рд░рд┐рдд
SQL рдХреНрд╡реЗрд░реА рдереЛрдбреА рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЖрд╣реЗ
-- ╨и╨░╨┐╨║╨░
select '@startuml
!define Table(name,desc) class name as "desc" << (T,#FFAAAA) >>
!define primary_key(x) <b>x</b>
!define unique(x) <color:green>x</color>
!define not_null(x) <u>x</u>
hide methods
hide stereotypes'
union all
-- ╨в╨░╨▒╨╗╨╕╤Ж╤Л
select format('Table(%s, "%s n information about %s") {'||chr(10), table_name, table_name, table_name) ||
(select string_agg(column_name || ' ' || upper(udt_name), chr(10))
from information_schema.columns
where table_schema = 'public'
and table_name = t.table_name) || chr(10) || '}'
from information_schema.tables t
where table_schema = 'public'
union all
-- ╨б╨▓╤П╨╖╨╕ ╨╝╨╡╨╢╨┤╤Г ╤В╨░╨▒╨╗╨╕╤Ж╨░╨╝╨╕
select distinct ccu.table_name || ' "1" --> "0..N" ' || tc.table_name || format(' : "A %s may haven many %s"', ccu.table_name, tc.table_name)
from information_schema.table_constraints as tc
join information_schema.key_column_usage as kcu on tc.constraint_name = kcu.constraint_name
join information_schema.constraint_column_usage as ccu on ccu.constraint_name = tc.constraint_name
where tc.constraint_type = 'FOREIGN KEY'
and ccu.constraint_schema = 'public'
and tc.table_name ~ '.*'
union all
-- ╨Я╨╛╨┤╨▓╨░╨╗
select '@enduml'
рдЖрдкрдг рдмрд╛рд░рдХрд╛рдИрдиреЗ рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рд╣реБрдб рдЕрдВрддрд░реНрдЧрдд рдЕрдиреЗрдХ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рд╕рд╛рдзрдиреЗ рджреЗрдЦреАрд▓ рд╕рдорд╛рди рдХреНрд╡реЗрд░реА рд╡рд╛рдкрд░рддрд╛рдд. рдЦрд░реЗ рдЖрд╣реЗ, рдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рд╕рд╣рд╕рд╛ рд╕рдЦреЛрд▓ рдЕрд╕рддрд╛рдд
рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЖрдгрд┐ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ
рдЪрд▓рд╛ рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХрд░рд┐рддреНрдпрд╛ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдпрд╛рдХрдбреЗ рдЬрд╛рдКрдпрд╛ - рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ. рдорд▓рд╛ "рдорд╛рдЭреНрдпрд╛ рдПрдХрд╛ рдорд┐рддреНрд░рд╛рдиреЗ" рд╕рд╛рдВрдЧрд┐рддрд▓реЗрд▓реА рдПрдХ рдЫреЛрдЯреАрд╢реА рд╕рддреНрдпрдХрдерд╛ рдЖрдард╡рддреЗ. рджреБрд╕рд░реНтАНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╡рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбреАрдмреАрдП рд░рд╛рд╣рдд рд╣реЛрддрд╛ рдЖрдгрд┐ рдХрд╛рд╣реА рд╡рд┐рдХрд╕рдХрд╛рдВрдиреА рддреНрдпрд╛рд▓рд╛ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛ рдУрд│рдЦрд▓реЗ рд╣реЛрддреЗ рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдиреЗ рдХрдзреАрд╣реА рддреНрдпрд╛рд▓рд╛ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛ рдкрд╛рд╣рд┐рд▓реЗ рд╣реЛрддреЗ (рдЕрдлрд╡рд╛рдВрдиреБрд╕рд╛рд░, рддреНрдпрд╛рдиреЗ рдкреБрдврдЪреНрдпрд╛ рдЗрдорд╛рд░рддреАрдд рдХреБрдареЗрддрд░реА рдХрд╛рдо рдХреЗрд▓реЗ рдЕрд╕рд▓реЗ рддрд░реАрд╣реА). тАЬXтАЭ рд╡рд╛рдЬрддрд╛, рдЬреЗрд╡реНрд╣рд╛ рдореЛрдареНрдпрд╛ рдХрд┐рд░рдХреЛрд│ рд╡рд┐рдХреНрд░реЗрддреНрдпрд╛рдЪреА рдкреЙрдбрдХреНрд╢рди рд╕рд┐рд╕реНрдЯрдо рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛ тАЬрд╡рд╛рдИрдЯ рд╡рд╛рдЯреВ рд▓рд╛рдЧрд▓реАтАЭ рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдиреЗ рд╢рд╛рдВрддрдкрдгреЗ рдУрд░реЕрдХрд▓ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рдореЕрдиреЗрдЬрд░рдХрдбреВрди рдЖрд▓реЗрдЦрд╛рдВрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкрд╛рдард╡рд▓реЗ, рдЬреНрдпрд╛рд╡рд░ рддреНрдпрд╛рдиреЗ рдЧрдВрднреАрд░ рдард┐рдХрд╛рдгреЗ тАЬрд╕рдордЬрдгреНрдпрд╛рдпреЛрдЧреНрдпрддрд╛тАЭ рд╕рд╛рдареА рд▓рд╛рд▓ рдорд╛рд░реНрдХрд░рдиреЗ рдХрд╛рд│рдЬреАрдкреВрд░реНрд╡рдХ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХреЗрд▓реА ( рд╣реЗ, рд╕реМрдореНрдпрдкрдгреЗ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдЬрд╛рд╕реНрдд рдорджрдд рдЭрд╛рд▓реА рдирд╛рд╣реА). рдЖрдгрд┐ рдпрд╛ "рдлреЛрдЯреЛ рдХрд╛рд░реНрдб" рдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рдорд▓рд╛ рдЙрдкрдЪрд╛рд░ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдореМрд▓реНрдпрд╡рд╛рди (рд╢рдмреНрджрд╛рдЪреНрдпрд╛ рджреЛрдиреНрд╣реА рдЕрд░реНрдерд╛рдиреЗ) рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдореЕрдиреЗрдЬрд░рдордзреНрдпреЗ рдХреЛрдгрд╛рд▓рд╛рд╣реА рдкреНрд░рд╡реЗрд╢ рдирд╡реНрд╣рддрд╛, рдХрд╛рд░рдг рдкреНрд░рдгрд╛рд▓реА рдЬрдЯрд┐рд▓ рдЖрдгрд┐ рдорд╣рд╛рдЧ рдЖрд╣реЗ, рдЕрдЪрд╛рдирдХ "рд╡рд┐рдХрд╛рд╕рдХ рдХрд╛рд╣реАрддрд░реА рдЕрдбрдЦрд│рддрд╛рдд рдЖрдгрд┐ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЦрдВрдбрд┐рдд рдХрд░рддрд╛рдд." рдореНрд╣рдгреВрди, рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ "рдЕрдиреБрднрд╡рд╛рдиреЗ" рдмреНрд░реЗрдХрдЪреЗ рд╕реНрдерд╛рди рдЖрдгрд┐ рдХрд╛рд░рдг рд╕рд╛рдкрдбрд▓реЗ рдЖрдгрд┐ рдПрдХ рдкреЕрдЪ рд╕реЛрдбрд▓рд╛. рдирдЬреАрдХрдЪреНрдпрд╛ рднрд╡рд┐рд╖реНрдпрд╛рдд рдбреАрдмреАрдПрдЪреЗ рдзреЛрдХрд╛рджрд╛рдпрдХ рдкрддреНрд░ рдкреБрдиреНрд╣рд╛ рдЖрд▓реЗ рдирд╛рд╣реА, рддрд░ рдкреНрд░рддреНрдпреЗрдХрдЬрдг рд╕реБрдЯрдХреЗрдЪрд╛ рдирд┐:рд╢реНрд╡рд╛рд╕ рдЯрд╛рдХреЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рдорд╛рдВрд╡рд░ рдкрд░рдд рдпреЗрдИрд▓ (рдирд╡реАрди рдкрддреНрд░ рдпреЗрдИрдкрд░реНрдпрдВрдд).
рдкрд░рдВрддреБ рдирд┐рд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рдЖрдгрд┐ рдЕрдиреБрдХреВрд▓ рджрд┐рд╕реВ рд╢рдХрддреЗ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢рдпреЛрдЧреНрдп рдЖрдгрд┐ рдкрд╛рд░рджрд░реНрд╢рдХ рдЕрд╕реВ рд╢рдХрддреЗ. рдХрдореАрдд рдХрдореА рддреНрдпрд╛рдЪрд╛ рдореВрд▓рднреВрдд рднрд╛рдЧ, рдореБрдЦреНрдп рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдордордзреНрдпреЗ рдПрдХ рдЬреЛрдб рдореНрд╣рдгреВрди (рдЬреЗ рдирдХреНрдХреАрдЪ рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗрдд рдЖрдгрд┐ рдмрд░реНрдпрд╛рдЪ рдмрд╛рдмрддреАрдд рди рднрд░рддрд╛ рдпреЗрдгрд╛рд░реЗ). рдХреЛрдгрддреАрд╣реА DBMS рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддреАрдмрджреНрджрд▓ рдЖрдгрд┐ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрдгрд┐ рдкреВрд░реНрдгрдкрдгреЗ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╣реЗ. рддреНрдпрд╛рдЪ "рд░рдХреНрддрд░рдВрдЬрд┐рдд" рдУрд░реЕрдХрд▓ рдбреАрдмреАрдордзреНрдпреЗ, рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рдмрджреНрджрд▓ рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддреАрд╣реА рдорд╛рд╣рд┐рддреА рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдпрд╛рдВрдордзреВрди рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рд╕рддреНрд░рд╛рдВрдкрд╛рд╕реВрди рдмрдлрд░ рдХреЕрд╢реЗрдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдкрд░реНрдпрдВрдд (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде,
рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд▓реЗрдХреНрдЯрд░ (рдЯреЗрд▓реАрдЧреНрд░рд╛рдл, рдореЗрдЯреНрд░рд┐рдХрдмреАрдЯ, рдХрд▓реЗрдХреНрдЯреЗрдб) тАЛтАЛрдЬреЗ рд╕рд╛рдиреБрдХреВрд▓ sql рдХреНрд╡реЗрд░реА рдХрд░реВ рд╢рдХрддрд╛рдд, рдпрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪреЗ рд╕реНрдЯреЛрд░реЗрдЬ (InfluxDB, Elasticsearch, Timescaledb) рдЖрдгрд┐ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭрд░ (Grafana, Kibana) рд╕рд╣ рд╕рд╢рд╕реНрддреНрд░, рддреБрдореНрд╣реА рдЕрдЧрджреА рд╕рд╣рдЬ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛. рдЖрдгрд┐ рдПрдХ рд▓рд╡рдЪрд┐рдХ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЬреА рдЗрддрд░ рд╕рд┐рд╕реНрдЯрдо-рд╡реНрдпрд╛рдкреА рдореЗрдЯреНрд░рд┐рдХреНрд╕рд╕рд╣ рдЬрд╡рд│реВрди рдПрдХрддреНрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓ (рдорд┐рд│рд╡рд▓реЗрд▓реЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди, OS рд╡рд░реВрди рдЗ.). рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЗ pgwatch2 рдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЬреЗ InfluxDB + Grafana рд╕рдВрдпреЛрдЬрди рд╡рд╛рдкрд░рддреЗ рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░рд╢реНрдирд╛рдВрдЪрд╛ рд╕рдВрдЪ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рджреЗрдЦреАрд▓ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.
рдПрдХреВрдг
рдЖрдгрд┐ рдирд┐рдпрдорд┐рдд SQL рдХреЛрдб рд╡рд╛рдкрд░реВрди рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рдп рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдпрд╛рдЪреА рд╣реА рдлрдХреНрдд рдЕрдВрджрд╛рдЬреЗ рдпрд╛рджреА рдЖрд╣реЗ. рдорд▓рд╛ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдгрдЦреА рдмрд░реЗрдЪ рдЙрдкрдпреЛрдЧ рд╕рд╛рдкрдбрддреАрд▓, рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛. рдЖрдгрд┐ рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рд╛рдпрдЪреЗ рдЖрдгрд┐ рдкреБрдврдЪреНрдпрд╛ рд╡реЗрд│реА рддреЗ рддреБрдордЪреНрдпрд╛ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдордзреНрдпреЗ рдХрд╕реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛рдпрдЪреЗ (рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдХрд╛) рдпрд╛рдмрджреНрджрд▓ рдЖрдореНрд╣реА рдмреЛрд▓реВ.
рд╕реНрддреНрд░реЛрдд: www.habr.com