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 рдмрд╛рдЯ рд╕рдмреИ рд░рд╕ рдирд┐рдЪреЛрдб рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛рд▓рд╛рдИ рдиреЛрдЯ рдЧрд░реНрдЫрдиреНред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, "рдбреЗрдЯрд╛-рдХреЗрдиреНрджреНрд░рд┐рдд" рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рджреЗрдЦрд╛ рдкрд░реНрджрдЫ, рдЬрд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕рдВрд▓рдЧреНрди рд╣реБрдиреНрдЫрдиреН (рддрд┐рдиреАрд╣рд░реВ "рдЖрдзрд╛рд░рд╡рд╛рджреАрд╣рд░реВ" рдкрдирд┐ рд╣реБрдиреН, рддрд┐рдиреАрд╣рд░реВ рдкрдирд┐ "рдЖрдзрд╛рд░рд╡рд╛рджреАрд╣рд░реВ" рд╣реБрдиреН, рддрд┐рдиреАрд╣рд░реВ рдкрдирд┐ "рдмреЗрд╕рдбреЗрдирд░рд╣рд░реВ" рдЖрджрд┐ рд╣реБрдиреН), рд░ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВред рд╡рд┐рд╡рд░рдгрд╣рд░реВрдорд╛ рдирдЧрдИрдХрди рддрдпрд╛рд░ рднреНрдпреВрд╣рд░реВ рд░ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдорд╛рддреНрд░ "рдкреБрд▓" рдЧрд░реНрдиреБрдкрд░реНрдЫред
рдХреЗ рд╣реБрдиреНрдЫ рдпрджрд┐ рд╣рд╛рдореАрд╕рдБрдЧ рджреБрд╡реИ рд╕рдВрд╕рд╛рд░рдХреЛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдерд┐рдпреЛ? рдпреЛ рдХрд╕рд░реА рдЬреАрд╡рди-рдкреБрд╖реНрдЯрд┐ рдЧрд░реНрдиреЗ рдирд╛рдордХреЛ рд╕рд╛рде рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдгрдорд╛ рдЧрд░рд┐рдиреНрдЫ
Clojure DSL рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд░рд╛рдореНрд░реЛ рднрд╛рд╖рд╛ рд╣реЛ, рддрд░ SQL рдЖрдлреИрдорд╛ рдПрдХ рд░рд╛рдореНрд░реЛ DSL рд╣реЛ, рд░ рд╣рд╛рдореАрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред S-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рдЙрддреНрдХреГрд╖реНрдЯ рдЫрдиреН, рддрд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдпрд╣рд╛рдБ рдХреЗрд╣реА рдирдпрд╛рдБ рдердкреНрджреИрдирдиреНред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореА рдХреЛрд╖реНрдардХрдХреЛ рдЦрд╛рддрд┐рд░ рдХреЛрд╖реНрдардХрд╣рд░реВ рдкрд╛рдЙрдБрдЫреМрдВред рд╕рд╣рдордд рд╣реБрдиреБрд╣реБрдиреНрди? рддреНрдпрд╕реЛрднрдП рддреНрдпреЛ рдХреНрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреБрд╣реЛрд╕реН рдЬрдм рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдПрдмреНрд╕реНрдЯреНрд░реНрдпрд╛рдХреНрд╢рди рд▓реАрдХ рд╣реБрди рдерд╛рд▓реНрдЫ рд░ рддрдкрд╛рдЗрдБ рдкреНрд░рдХрд╛рд░реНрдпрд╕рдБрдЧ рд▓рдбреНрди рдерд╛рд▓реНрдиреБрд╣реБрдиреНрдЫред (рдХрдЪреНрдЪрд╛-sql)
рддреНрдпрд╕реЛрднрдП рдореИрд▓реЗ рдХреЗ рдЧрд░реНрдиреБрдкрд░реНрдЫ? рдирд┐рдпрдорд┐рдд SQL рдХреЛ рд░реВрдкрдорд╛ 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 рдЖрдлреИрдВ, рдХреНрд▓реЛрдЬрд░ рдЖрдлреИрдВ" рд╕рд┐рджреНрдзрд╛рдиреНрддрдХреЛ рдкрд╛рд▓рдирд╛ рдЧрд░реЗрд░, рддрдкрд╛рдЗрдБ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ:
- рдХреБрдиреИ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрдЯрд┐рдХ рдЖрд╢реНрдЪрд░реНрдп рдЫреИрдиред рддрдкрд╛рдИрдХреЛ рдбрд╛рдЯрд╛рдмреЗрд╕ (рдХреБрдиреИ рдЕрдиреНрдп рдЬрд╕реНрддреИ) SQL рдорд╛рдирдХрд╕рдБрдЧ резрежреж% рдЕрдиреБрд░реВрдк рдЫреИрди - рддрд░ рдпрд╕рд▓реЗ Yesql рдХреЛ рд▓рд╛рдЧрд┐ рдлрд░рдХ рдкрд░реНрджреИрдиред рддрдкрд╛рдИрд▓реЗ SQL рд╕рдорддреБрд▓реНрдп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛рдХреЛ рд╕рд╛рде рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╢рд┐рдХрд╛рд░ рдЧрд░реНрди рд╕рдордп рдмрд░реНрдмрд╛рдж рдЧрд░реНрдиреБрд╣реБрдиреЗ рдЫреИрдиред рддрдкрд╛рдИрдВрд▓реЗ рдХрд╣рд┐рд▓реНрдпреИ рд╕рдорд╛рд░реЛрд╣рдорд╛ рдлрд░реНрдХрд┐рдиреБ рдкрд░реНрджреИрди (raw-sql "some('funky'::SYNTAX)")).
- рдЙрддреНрддрдо рд╕рдореНрдкрд╛рджрдХ рд╕рдорд░реНрдердиред рддрдкрд╛рдИрдВрдХреЛ рд╕рдореНрдкрд╛рджрдХрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдЙрддреНрдХреГрд╖реНрдЯ SQL рд╕рдорд░реНрдерди рдЫред SQL рдХреЛ рд░реВрдкрдорд╛ SQL рдмрдЪрдд рдЧрд░реЗрд░ рддрдкрд╛рдИрдВ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
- рдЯреЛрд▓реА рдЕрдиреБрдХреВрд▓рддрд╛ред рддрдкрд╛рдИрдВрдХрд╛ DBA рд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ Clojure рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрднрдПрдХреЛ SQL рдкрдвреНрди рд░ рд▓реЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
- рд╕рдЬрд┐рд▓реЛ рдкреНрд░рджрд░реНрд╢рди рдЯреНрдпреБрдирд┐рдВрдЧред рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдкреНрд░рд╢реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ? рддрдкрд╛рдИрдХреЛ рдХреНрд╡реЗрд░реА рдирд┐рдпрдорд┐рдд SQL рд╣реБрдБрджрд╛ рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЗрдиред
- рдкреНрд░рд╢реНрдирд╣рд░реВ рдкреБрди: рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИред рддреА рд╕рдорд╛рди SQL рдлрд╛рдЗрд▓рд╣рд░реВрд▓рд╛рдИ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рддрд╛рдиреНрдиреБрд╣реЛрд╕реН рд░ рдЫреЛрдбреНрдиреБрд╣реЛрд╕реН рдХрд┐рдирднрдиреЗ рдпреЛ рдХреЗрд╡рд▓ рд╕рд╛рджрд╛ рдкреБрд░рд╛рдиреЛ SQL рд╣реЛ - рдпрд╕рд▓рд╛рдИ рд╕рд╛рдЭреЗрджрд╛рд░реА рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, рд╡рд┐рдЪрд╛рд░ рдзреЗрд░реИ рд░рд╛рдореНрд░реЛ рдЫ рд░ рдПрдХреИ рд╕рдордпрдорд╛ рдзреЗрд░реИ рд╕рд░рд▓ рдЫ, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓реЗ рдзреЗрд░реИ рдХрдорд╛рдПрдХреЛ рдЫ
IDE рд░ DB рдкреНрд░рдмрдиреНрдзрдХрд╣рд░реВ
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджреИрдирд┐рдХ рдХрд╛рд░реНрдп рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реМрдВред рдкреНрд░рд╛рдпрдГ рд╣рд╛рдореАрд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдХреЗрд╣реА рд╡рд╕реНрддреБрд╣рд░реВ рдЦреЛрдЬреНрдиреБрдкрд░реНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕реНрдХреАрдорд╛рдорд╛ рддрд╛рд▓рд┐рдХрд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдЕрдзреНрдпрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдХреБрди рд╕реНрддрдореНрднрд╣рд░реВ, рдХреБрдЮреНрдЬреАрд╣рд░реВ, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВ, рдЕрд╡рд░реЛрдзрд╣рд░реВ, рдЖрджрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ)ред рд░ рдХреБрдиреИ рдкрдирд┐ рдЧреНрд░рд╛рдлрд┐рдХрд▓ IDE рд╡рд╛ рд╕рд╛рдиреЛ DB-рдкреНрд░рдмрдиреНрдзрдХрдмрд╛рдЯ, рд╕рдмреИ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореА рдпреА рдХреНрд╖рдорддрд╛рд╣рд░реВ рдареНрдпрд╛рдХреНрдХреИ рдЖрд╢рд╛ рдЧрд░реНрдЫреМрдВред рддрд╛рдХрд┐ рдпреЛ рдЫрд┐рдЯреЛ рдЫ рд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣рд┐рддрдХреЛ рд╕рдЮреНрдЭреНрдпрд╛рд▓ (рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд░рд┐рдореЛрдЯ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдврд┐рд▓реЛ рдЬрдбрд╛рдирдХреЛ рд╕рд╛рде) рдирдЖрдПрд╕рдореНрдо рддрдкрд╛рдИрд▓реЗ рдЖрдзрд╛ рдШрдгреНрдЯрд╛ рдкрд░реНрдЦрдиреБ рдкрд░реНрджреИрди, рд░ рдПрдХреИ рд╕рдордпрдорд╛, рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рддрд╛рдЬрд╛ рд░ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЫ, рд░ рдХреНрдпрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рдЬрдВрдХ рд╣реЛрдЗрдиред рдпрд╕рдмрд╛рд╣реЗрдХ, рдбрд╛рдЯрд╛рдмреЗрд╕ рдЬрддрд┐ рдЬрдЯрд┐рд▓ рд░ рдареБрд▓реЛ рд╣реБрдиреНрдЫ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЬрддрд┐ рдзреЗрд░реИ рд╣реБрдиреНрдЫ, рдпреЛ рдЧрд░реНрди рддреНрдпрддрд┐ рдиреИ рдЧрд╛рд╣реНрд░реЛ рд╣реБрдиреНрдЫред
рддрд░ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдо рдорд╛рдЙрд╕ рдЯрд╛рдврд╛ рдлрд╛рд▓реНрдЫреБ рд░ рдХреЛрдб рд▓реЗрдЦреНрдЫреБред рдорд╛рдиреМрдВ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ "HR" рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдХреБрди рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ (рд░ рдХреБрди рдЧреБрдгрд╣рд░реВ) рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреН рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдзреЗрд░реИ рдЬрд╕реЛ DBMSs рдорд╛, рдЬрд╛рдирдХрд╛рд░реА_schema рдмрд╛рдЯ рдпреЛ рд╕рд░рд▓ рдкреНрд░рд╢реНрдирдХреЛ рд╕рд╛рде рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:
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'
Oracle рд▓рд╛рдИ information_schema рдерд╛рд╣рд╛ рдЫреИрди, рддрд░ рдпреЛ рдЫ
select table_name
, pct_free -- ╨Ь╨╕╨╜╨╕╨╝╤Г╨╝ ╤Б╨▓╨╛╨▒╨╛╨┤╨╜╨╛╨│╨╛ ╨╝╨╡╤Б╤В╨░ ╨▓ ╨▒╨╗╨╛╨║╨╡ ╨┤╨░╨╜╨╜╤Л╤Е (%)
, pct_used -- ╨Ь╨╕╨╜╨╕╨╝╤Г╨╝ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╨╝╨╛╨│╨╛ ╨╝╨╡╤Б╤В╨░ ╨▓ ╨▒╨╗╨╛╨║╨╡ ╨┤╨░╨╜╨╜╤Л╤Е (%)
, last_analyzed -- ╨Ф╨░╤В╨░ ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨│╨╛ ╤Б╨▒╨╛╤А╨░ ╤Б╤В╨░╤В╨╕╤Б╤В╨╕╨║╨╕
, ...
from all_tables
where owner = 'HR'
ClickHouse рдХреБрдиреИ рдЕрдкрд╡рд╛рдж рдЫреИрди:
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'
рдзреЗрд░реИ рдЬрд╕реЛ рдЕрдиреНрдп рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВ рд╕рдорд╛рди рдкреНрд░рд╢реНрдирд╣рд░реВ рдкрдирд┐ рд▓реНрдпрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рдордВрдЧреЛрд╕рдБрдЧ рдкрдирд┐ рдЫ
рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ рддрдкрд╛рдИрд▓реЗ рдЯреЗрдмрд▓рдХреЛ рдмрд╛рд░реЗрдорд╛ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рдХреБрдиреИ рдкрдирд┐ рд╡рд╕реНрддреБрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд╕рдордп-рд╕рдордпрдорд╛, рджрдпрд╛рд▓реБ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рддреНрдпрд╕реНрддрд╛ рдХреЛрдбрд╣рд░реВ рд╕рд╛рдЭреЗрджрд╛рд░реА рдЧрд░реНрдЫрдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, habra рд▓реЗрдЦрд╣рд░реВрдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛рдорд╛ "PostgreSQL рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВ рдХрд╛рдЧрдЬрд╛рдд рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдпрд╣рд░реВ" (
рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдиреЗрднрд┐рдЧреЗрдЯ рдЧрд░реНрдиреЗ рд░ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рдЦреЛрдЬреА рдЧрд░реНрдиреЗ рдпреЛ рд╡рд┐рдзрд┐ рдзреЗрд░реИ рд▓рдЪрд┐рд▓реЛ рдЫ, рдзреЗрд░реИ рд╕рдордп рдмрдЪрдд рдЧрд░реНрджрдЫ, рд░ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЕрд╣рд┐рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рднрдПрдХреЛ рдлрд╛рд░рдордорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреЛрд╖реНрдЯрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛред
рд╡рд╕реНрддреБрд╣рд░реБ рд╕рдВрдЧ рд╕рдЮреНрдЪрд╛рд▓рди
рд╣рд╛рдореАрд▓реЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдкрдЫрд┐ рд░ рдЕрдзреНрдпрдпрди рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдЙрдкрдпреЛрдЧреА рдХреЗрд╣реА рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛, рдХрд┐рдмреЛрд░реНрдбрдмрд╛рдЯ рдЖрдлреНрдиреЛ рдФрдВрд▓рд╛рд╣рд░реВ рдирд▓рд┐рдИ рдкрдирд┐ред
рдпреЛ рдХреБрдиреИ рдЧреЛрдкреНрдп рдХреБрд░рд╛ рдЫреИрди рдХрд┐ рдХреЗрд╡рд▓ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдЯрд╛рдЙрдБрджрд╛ рд▓рдЧрднрдЧ рд╕рдмреИ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕рдорд╛рди рджреЗрдЦрд┐рдиреНрдЫ:
drop table hr.persons
рддрд░ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдВрдЧ рдпреЛ рдердк рд░реЛрдЪрдХ рд╣реБрдиреНрдЫред рд▓рдЧрднрдЧ рдХреБрдиреИ рдкрдирд┐ DBMS (рдзреЗрд░реИ NoSQL рд╕рд╣рд┐рдд) рд▓реЗ рдПрдХ рд╡рд╛ рдЕрд░реНрдХреЛ рд░реВрдкрдорд╛ "рддрд╛рд▓рд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛" рдЧрд░реНрди рд╕рдХреНрдЫ, рд░ рдпрд╕рдХреЛ рдореБрдЦреНрдп рднрд╛рдЧ рдкрдирд┐ рдереЛрд░реИ рдлрд░рдХ рд╣реБрдиреЗрдЫ (рдирд╛рдо, рд╕реНрддрдореНрднрд╣рд░реВрдХреЛ рд╕реВрдЪреА, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВ), рддрд░ рдЕрдиреНрдп рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдирд╛рдЯрдХреАрдп рд░реВрдкрдорд╛ рдлрд░рдХ рд╣реБрди рд╕рдХреНрдЫ рд░ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рдЖрдиреНрддрд░рд┐рдХ рдЙрдкрдХрд░рдг рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ DBMS рдХреЛ рдХреНрд╖рдорддрд╛рд╣рд░реВред рдореЗрд░реЛ рдордирдкрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдпреЛ рд╣реЛ рдХрд┐ рдУрд░реЗрдХрд▓ рдХрд╛рдЧрдЬрд╛рддрдорд╛ "рддрд╛рд▓рд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН" рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрд╡рд▓ "рдирдЧреНрди" BNF рд╣рд░реВ рдЫрдиреНред
рд╕рд╛рдереИ, рдзреЗрд░реИ DBMS рд╣рд░реВрдХреЛ рдЖрдлреНрдиреИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░рдХрд╛ рд╡рд╕реНрддреБрд╣рд░реВ рдЫрдиреН рдЬреБрди рдЕрдиреНрдп 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'
рдпрджрд┐ рддрдкрд╛рдЗрдБ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рд╣реБрдб рдЕрдиреНрддрд░реНрдЧрдд рдзреЗрд░реИ рджреГрд╢реНрдп рдЙрдкрдХрд░рдгрд╣рд░реВрд▓реЗ рдкрдирд┐ рд╕рдорд╛рди рдкреНрд░рд╢реНрдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред рд╣реЛ, рдпреА рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдЧрд╣рд┐рд░реЛ рд╣реБрдиреНрдЫрдиреН
рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд░ рдирд┐рдЧрд░рд╛рдиреА
рдкрд░рдореНрдкрд░рд╛рдЧрдд рд░реВрдкрдорд╛ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп - рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдирд┐рдЧрд░рд╛рдиреАрдорд╛ рдЬрд╛рдФрдВред рдорд▓рд╛рдИ "рдореЗрд░реЛ рдПрдХрдЬрдирд╛ рд╕рд╛рдереА" рджреНрд╡рд╛рд░рд╛ рднрдирд┐рдПрдХреЛ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рд╕рддреНрдп рдХрдерд╛ рдпрд╛рдж рдЫред рдЕрд░реНрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрддреНрдпрд╣рд╛рдБ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА DBA рдмрд╕реНрдиреБрднрдпреЛ, рд░ рдХреЗрд╣рд┐ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдЙрд╣рд╛рдБрд▓рд╛рдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рдЪрд┐рдиреЗрдХрд╛ рдерд┐рдП, рд╡рд╛ рдЙрд╣рд╛рдБрд▓рд╛рдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рджреЗрдЦреЗрдХрд╛ рдерд┐рдП (рддрдереНрдпрдХреЛ рдмрд╛рд╡рдЬреБрдж, рдЕрдлрд╡рд╛рд╣рд╣рд░реВ рдЕрдиреБрд╕рд╛рд░, рдЙрд╕рд▓реЗ рдЕрд░реНрдХреЛ рднрд╡рдирдорд╛ рдХрддреИ рдХрд╛рдо рдЧрд░реНрдпреЛ)ред рдШрдгреНрдЯрд╛ "X" рдорд╛, рдЬрдм рдПрдХ рдареВрд▓рд╛ рдЦреБрджреНрд░рд╛ рд╡рд┐рдХреНрд░реЗрддрд╛рдХреЛ рдкреЛрдбрдХреНрд╢рди рдкреНрд░рдгрд╛рд▓реАрд▓реЗ рдлреЗрд░рд┐ рдПрдХ рдкрдЯрдХ "рдирд░рд╛рдореНрд░реЛ рдорд╣рд╕реБрд╕" рдЧрд░реНрди рдерд╛рд▓реНрдпреЛ, рдЙрд╕рд▓реЗ рдЪреБрдкрдЪрд╛рдк рдУрд░реЗрдХрд▓ рдЗрдиреНрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдкреНрд░рдмрдиреНрдзрдХрдмрд╛рдЯ рдЧреНрд░рд╛рдлрд╣рд░реВрдХреЛ рд╕реНрдХреНрд░рд┐рдирд╕рдЯрд╣рд░реВ рдкрдард╛рдпреЛ, рдЬрд╕рдорд╛ рдЙрд╕рд▓реЗ "рдмреБрдЭреНрдиреЗ рдХреНрд╖рдорддрд╛" рдХреЛ рд▓рд╛рдЧрд┐ рд░рд╛рддреЛ рдорд╛рд░реНрдХрд░рдХреЛ рд╕рд╛рде рдорд╣рддреНрд╡рдкреВрд░реНрдг рдард╛рдЙрдБрд╣рд░реВрд▓рд╛рдИ рдзреНрдпрд╛рдирдкреВрд░реНрд╡рдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЧрд░реНрдпреЛред рдпрд╕рд▓рд╛рдИ рд╣рд▓реНрдХрд╛ рд░реВрдкрдорд╛ рднрдиреНрдиреБрдкрд░реНрджрд╛, рдпрд╕рд▓реЗ рдзреЗрд░реИ рдорджреНрджрдд рдЧрд░реЗрди)ред рд░ рдпреЛ "рдлреЛрдЯреЛ рдХрд╛рд░реНрдб" рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдореИрд▓реЗ рдЙрдкрдЪрд╛рд░ рдЧрд░реНрдиреБрдкрд░реНтАНрдпреЛред рдПрдХреИ рд╕рдордпрдорд╛, рдЕрдирдореЛрд▓ (рд╢рдмреНрджрдХреЛ рджреБрд╡реИ рдЕрд░реНрдердорд╛) рдЗрдиреНрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдкреНрд░рдмрдиреНрдзрдХрдорд╛ рдХрд╕реИрдХреЛ рдкрд╣реБрдБрдЪ рдерд┐рдПрди, рдХрд┐рдирднрдиреЗ рдкреНрд░рдгрд╛рд▓реА рдЬрдЯрд┐рд▓ рд░ рдорд╣рдБрдЧреЛ рдЫ, рдЕрдЪрд╛рдирдХ "рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдХреЗрд╣рд┐ рдорд╛ рдареЛрдХрд░ рдЦрд╛рдиреНрдЫ рд░ рд╕рдмреИ рдХреБрд░рд╛ рддреЛрдбреНрдЫред" рддреНрдпрд╕рдХрд╛рд░рдг, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ "рдЕрдиреБрднрд╡рд╛рддреНрдордХ" рд╕реНрдерд╛рди рд░ рдмреНрд░реЗрдХрдХреЛ рдХрд╛рд░рдг рдлреЗрд▓рд╛ рдкрд╛рд░реЗ рд░ рдкреНрдпрд╛рдЪ рдЬрд╛рд░реА рдЧрд░реЗред рдпрджрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдпрдорд╛ DBA рдмрд╛рдЯ рдЦрддрд░рдирд╛рдХ рдкрддреНрд░ рдлреЗрд░рд┐ рдирдЖрдПрдХреЛ рднрдП, рддрдм рд╕рдмреИрд▓реЗ рд░рд╛рд╣рддрдХреЛ рд╕рд╛рд╕ рдлреЗрд░реНрдЫрдиреН рд░ рдЖрдлреНрдиреЛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдлрд░реНрдХрдиреЗрдЫрдиреН (рдирдпрд╛рдБ рдкрддреНрд░ рд╕рдореНрдо)ред
рддрд░ рдЕрдиреБрдЧрдорди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдзреЗрд░реИ рд░рдорд╛рдЗрд▓реЛ рд░ рдореИрддреНрд░реАрдкреВрд░реНрдг рджреЗрдЦрд┐рди рд╕рдХреНрдЫ, рд░ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг, рд╕рдмреИрдХрд╛ рд▓рд╛рдЧрд┐ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рд░ рдкрд╛рд░рджрд░реНрд╢реАред рдХрдореНрддрд┐рдорд╛ рдпрд╕рдХреЛ рдЖрдзрд╛рд░рднреВрдд рднрд╛рдЧ, рдореБрдЦреНрдп рдЕрдиреБрдЧрдорди рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛ рдердкрдХреЛ рд░реВрдкрдорд╛ (рдЬреБрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рдЙрдкрдпреЛрдЧреА рдЫрдиреН рд░ рдзреЗрд░реИ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЫрдиреН)ред рдХреБрдиреИ рдкрдирд┐ DBMS рдпрд╕рдХреЛ рд╣рд╛рд▓рдХреЛ рдЕрд╡рд╕реНрдерд╛ рд░ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдЧрд░реНрди рд╕реНрд╡рддрдиреНрддреНрд░ рд░реВрдкрдорд╛ рд░ рдмрд┐рд▓реНрдХреБрд▓ рдирд┐: рд╢реБрд▓реНрдХ рдЫред рдЙрд╣реА "рд░рдХреНрддрд░реВрдкреА" рдУрд░реЗрдХрд▓ DB рдорд╛, рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рд▓рдЧрднрдЧ рдХреБрдиреИ рдкрдирд┐ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рджреГрд╢реНрдпрд╣рд░реВрдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд░ рд╕рддреНрд░рд╣рд░реВрджреЗрдЦрд┐ рдмрдлрд░ рдХреНрдпрд╛рд╕рдХреЛ рдЕрд╡рд╕реНрдерд╛рд╕рдореНрдо (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐,
рдпрд╕рд░реА, рдХрд╕реНрдЯрдо sql рдХреНрд╡реЗрд░реАрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдХреНрдиреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд▓реЗрдХреНрдЯрд░ (Telegraf, Metricbeat, Collectd) рдХреЛ рдХреЗрд╣реА рдкреНрд░рдХрд╛рд░рд▓реЗ рд╕рд╢рд╕реНрддреНрд░, рдпреА рдореЗрдЯреНрд░рд┐рдХреНрд╕рдХреЛ рднрдгреНрдбрд╛рд░рдг (InfluxDB, Elasticsearch, Timescaledb) рд░ рдПрдХ рднрд┐рдЬреБрдЕрд▓рд╛рдЗрдЬрд░ (Grafana, Kibana), рддрдкрд╛рдИрдВ рдПрдХрджрдо рд╕рдЬрд┐рд▓реЛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд░ рдПрдХ рд▓рдЪрд┐рд▓реЛ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдЬреБрди рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓реА-рд╡реНрдпрд╛рдкреА рдореЗрдЯреНрд░рд┐рдХреНрд╕ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд░реНрднрд░рдмрд╛рдЯ, OS рдмрд╛рдЯ, рдЗрддреНрдпрд╛рджрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдПрдХреЛ) рд╕рдБрдЧ рдирдЬрд┐рдХрдмрд╛рдЯ рдПрдХреАрдХреГрдд рд╣реБрдиреЗрдЫред рдЬрд╕реНрддреИ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпреЛ pgwatch2 рдорд╛ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ InfluxDB + Grafana рд╕рдВрдпреЛрдЬрди рд░ рдкреНрд░рдгрд╛рд▓реА рджреГрд╢реНрдпрд╣рд░реВрдорд╛ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд╕реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЬреБрди рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдХреБрд▓
рд░ рдпреЛ рдирд┐рдпрдорд┐рдд SQL рдХреЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рдмреЗрд╕рд╕рдБрдЧ рдХреЗ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреНрдиреЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╕реВрдЪреА рдорд╛рддреНрд░ рд╣реЛред рдо рдкрдХреНрдХрд╛ рдЫреБ рдХрд┐ рддрдкрд╛рдИрд▓реЗ рдзреЗрд░реИ рдкреНрд░рдпреЛрдЧрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реНред рд░ рд╣рд╛рдореА рдХрд╕рд░реА (рд░ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХреБрд░рд╛ рдХрд┐рди) рдпреА рд╕рдмреИрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрдиреЗ рд░ рдЕрд░реНрдХреЛ рдкрдЯрдХ рддрдкрд╛рдИрдВрдХреЛ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВред
рд╕реНрд░реЛрдд: www.habr.com