"рдХреЛрдб рдореНрд╣рдгреВрди рдбреЗрдЯрд╛рдмреЗрд╕" рдЕрдиреБрднрд╡

"рдХреЛрдб рдореНрд╣рдгреВрди рдбреЗрдЯрд╛рдмреЗрд╕" рдЕрдиреБрднрд╡

SQL, рдХрд╛рдп рд╕реЛрдкреЗ рдЕрд╕реВ рд╢рдХрддреЗ? рдЖрдкрд▓реНрдпрд╛рдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдПрдХ рд╕рд╛рдзреА рд╡рд┐рдирдВрддреА рд▓рд┐рд╣реВ рд╢рдХрддреЛ - рдЖрдореНрд╣реА рдЯрд╛рдЗрдк рдХрд░рддреЛ рдирд┐рд╡рдбрд╛, рдирдВрддрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реНрддрдВрднрд╛рдВрдЪреА рдпрд╛рджреА рдХрд░рд╛ рдЖрд░реЛрдЧреНрдпрд╛рдкрд╛рд╕реВрди , рдЯреЗрдмрд▓ рдирд╛рд╡, рдХрд╛рд╣реА рдЕрдЯреА рдордзреНрдпреЗ рдЬреЗрдереЗ рдЖрдгрд┐ рдЗрддрдХреЗрдЪ рдЖрд╣реЗ - рдЙрдкрдпреБрдХреНрдд рдбреЗрдЯрд╛ рдЖрдордЪреНрдпрд╛ рдЦрд┐рд╢рд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ (рдЬрд╡рд│рдЬрд╡рд│) рддреНрдпрд╛ рд╡реЗрд│реА рдХреЛрдгрддрд╛ DBMS рд╣реБрдбрдЦрд╛рд▓реА рдЖрд╣реЗ рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛ (рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рдЕрдЬрд┐рдмрд╛рдд DBMS рдирд╛рд╣реА). рдкрд░рд┐рдгрд╛рдореА, рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддреНрдпрд╛рд╣реА рдбреЗрдЯрд╛ рд╕реНрд░реЛрддрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ (рд╕рдВрдмрдВрдзрд╛рддреНрдордХ рдЖрдгрд┐ рддрд╕реЗ рдирд╛рд╣реА) рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдбрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ (рддреНрдпрд╛рдд рдЬреЗ рдХрд╛рд╣реА рд╕реВрдЪрд┐рдд рд╣реЛрддреЗ - рдЖрд╡реГрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг, рдХреЛрдб рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди, рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдЖрдгрд┐ рдЗрддрдХреЗрдЪ). рдЖрдгрд┐ рд╣реЗ рдХреЗрд╡рд│ рдбреЗрдЯрд╛, рд╕реНрдХреАрдорд╛ рдЖрдгрд┐ рд╕реНрдерд▓рд╛рдВрддрд░рд╛рдВрд╡рд░рдЪ рд▓рд╛рдЧреВ рд╣реЛрдд рдирд╛рд╣реА рддрд░ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╕реНрдЯреЛрд░реЗрдЬрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдЖрдпреБрд╖реНрдпрд╛рд╡рд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ. рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдореНрд╣реА "рдХреЛрдб рдореНрд╣рдгреВрди рдбреЗрдЯрд╛рдмреЗрд╕" рдЪреНрдпрд╛ рд▓реЗрдиреНрд╕ рдЕрдВрддрд░реНрдЧрдд рджреИрдирдВрджрд┐рди рдХрд╛рд░реНрдпреЗ рдЖрдгрд┐ рд╡рд┐рд╡рд┐рдз рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдмрджреНрджрд▓ рдмреЛрд▓реВ.

рдЖрдгрд┐ рдЖрддрд╛рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛ рдУрдЖрд░рдПрдо. "SQL vs ORM" рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рд▓рдврд╛рдпрд╛ рдкрд░рдд рд▓рдХреНрд╖рд╛рдд рдЖрд▓реНрдпрд╛ рдкреНрд░реА-рдкреЗрдЯреНрд░реАрди рд░рд╕'.

рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдореЕрдкрд┐рдВрдЧ

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 рджреНрд╡реЗрд╖".

рдмреЕрд░рд┐рдХреЗрдбреНрд╕рдЪреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рдмрд╛рдЬреВрд▓рд╛, рд╢реБрджреНрдз тАЬрд╣рд╛рддрдирд┐рд░реНрдорд┐рддтАЭ SQL рдЪреЗ рдЕрдиреБрдпрд╛рдпреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ DBMS рдордзреВрди рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрддрд░ рдЖрдгрд┐ рдЕтАНреЕрдмреНрд╕реНрдЯреНрд░реЕрдХреНрд╢рдирд╢рд┐рд╡рд╛рдп рд╕рд░реНрд╡ рд░рд╕ рдкрд┐рд│реВрди рдХрд╛рдврдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛рдд. рдкрд░рд┐рдгрд╛рдореА, "рдбреЗрдЯрд╛-рдХреЗрдВрджреНрд░рд┐рдд" рдкреНрд░рдХрд▓реНрдк рджрд┐рд╕рддрд╛рдд, рдЬреЗрдереЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд▓реЛрдХ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдЧреБрдВрддрд▓реЗрд▓реЗ рдЕрд╕рддрд╛рдд (рддреЗ "рдореВрд▓рднреВрддрд╡рд╛рджреА" рджреЗрдЦреАрд▓ рдЕрд╕рддрд╛рдд, рддреЗ "рдореВрд▓рднреВрддрд╡рд╛рджреА" рджреЗрдЦреАрд▓ рдЕрд╕рддрд╛рдд, рддреЗ "рдмреЗрд╕рдбреЗрдирд░реНрд╕" рдЗ.) рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рдХ рджреЗрдЦреАрд▓ рдЕрд╕рддрд╛рдд. рддрдкрд╢рд┐рд▓рд╛рдд рди рдЬрд╛рддрд╛ рдлрдХреНрдд рд░реЗрдбреАрдореЗрдб рджреГрд╢реНрдпреЗ рдЖрдгрд┐ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ "рдкреБрд▓" рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓.

рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрдиреНрд╣реА рдЬрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрд╕реЗрд▓ рддрд░? рдЬреАрд╡рдирд╛рдЪреА рдкреБрд╖реНрдЯреА рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдирд╛рд╡рд╛рд╕рд╣ рд╣реЗ рдПрдХрд╛ рдЕрджреНрднреБрдд рд╕рд╛рдзрдирд╛рдд рдХрд╕реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ Yesql. рдореА рдорд╛рдЭреНрдпрд╛ рд╡рд┐рдирд╛рдореВрд▓реНрдп рднрд╛рд╖рд╛рдВрддрд░рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХрд▓реНрдкрдиреЗрддреАрд▓ рдХрд╛рд╣реА рдУрд│реА рджреЗрдИрди рдЖрдгрд┐ рдЖрдкрдг рддреНрдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдК рд╢рдХрддрд╛ рдпреЗрдереЗ.

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 рдЖрд╣реЗ - рдлрдХреНрдд рддреЗ рд╢реЗрдЕрд░ рдХрд░рд╛.

рдорд╛рдЭреНрдпрд╛ рдорддреЗ, рдХрд▓реНрдкрдирд╛ рдЦреВрдк рдЫрд╛рди рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдЕрдЧрджреА рд╕реЛрдкреА рдЖрд╣реЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдкреНрд░рдХрд▓реНрдкрд╛рдиреЗ рдмрд░реЗрдЪ рдХрд╛рд╣реА рдорд┐рд│рд╡рд▓реЗ рдЖрд╣реЗ рдЕрдиреБрдпрд╛рдпреА рд╡рд┐рд╡рд┐рдз рднрд╛рд╖рд╛рдВрдордзреНрдпреЗ. рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреБрдвреЗ ORM рдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЗрддрд░ рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреАрдВрдкрд╛рд╕реВрди 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'

рдЗрддрд░ рдмрд░реНтАНрдпрд╛рдЪ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╛рдареА, рддреБрдореНрд╣реА рддрддреНрд╕рдо рдкреНрд░рд╢реНрдирд╛рдВрд╕рд╣ рдпреЗрдК рд╢рдХрддрд╛ (рдЕрдЧрджреА рдореЛрдВрдЧреЛрдХрдбреЗ рджреЗрдЦреАрд▓ рдЖрд╣реЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдгрд╛рд▓реА рд╕рдВрдЧреНрд░рд╣, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рд┐рд╕реНрдЯрдордордзреАрд▓ рд╕рд░реНрд╡ рд╕рдВрдЧреНрд░рд╣рд╛рдВрдЪреА рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ).

рдЕрд░реНрдерд╛рдд, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЖрдкрдг рдХреЗрд╡рд│ рд╕рд╛рд░рдгреНрдпрд╛рдВрдмрджреНрджрд▓рдЪ рдирд╛рд╣реА рддрд░ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡рд╕реНрддреВрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡реВ рд╢рдХрддрд╛. рд╡реЗрд│реЛрд╡реЗрд│реА, рджрдпрд╛рд│реВ рд▓реЛрдХ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╛рдареА рдЕрд╕реЗ рдХреЛрдб рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЕрдмреНрд░рд╛ рд▓реЗрдЦрд╛рдВрдЪреНрдпрд╛ рдорд╛рд▓рд┐рдХреЗрдд "рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдбреЗрдЯрд╛рдмреЗрд╕реЗрд╕рдЪреЗ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдпреЗ" (рдЖрдпрдмреА, рдмреЗрди, рд╡реНрдпрд╛рдпрд╛рдорд╢рд╛рд│рд╛). рдЕрд░реНрдерд╛рдд, рдкреНрд░рд╢реНрдирд╛рдВрдЪрд╛ рд╣рд╛ рд╕рдВрдкреВрд░реНрдг рдбреЛрдВрдЧрд░ рдорд╛рдЭреНрдпрд╛ рдбреЛрдХреНрдпрд╛рдд рдареЗрд╡рдгреЗ рдЖрдгрд┐ рддреЗ рд╕рддрдд рдЯрд╛рдЗрдк рдХрд░рдгреЗ рдЦреВрдк рдЖрдирдВрджрджрд╛рдпрдХ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдорд╛рдЭреНрдпрд╛ рдЖрд╡рдбрддреНрдпрд╛ IDE/рд╕рдВрдкрд╛рджрдХрд╛рдВрдордзреНрдпреЗ рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рд╡рд╛рд░рдВрд╡рд╛рд░ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрд╕рд╛рдареА рд╕реНрдирд┐рдкреЗрдЯреНрд╕рдЪрд╛ рдПрдХ рдкреВрд░реНрд╡-рддрдпрд╛рд░ рд╕рдВрдЪ рдЖрд╣реЗ рдЖрдгрд┐ рдмрд╛рдХреА рдлрдХреНрдд рдЯрд╛рдИрдк рдХрд░рдгреЗ рдЖрд╣реЗ. рдЯреЗрдореНрдкреНрд▓реЗрдЯрдордзреНрдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА рдирд╛рд╡реЗ.

рдкрд░рд┐рдгрд╛рдореА, рдиреЗрд╡реНрд╣рд┐рдЧреЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рд╣реА рдкрджреНрдзрдд рдЕрдзрд┐рдХ рд▓рд╡рдЪрд┐рдХ рдЖрд╣реЗ, рдмрд░рд╛рдЪ рд╡реЗрд│ рд╡рд╛рдЪрд╡рддреЗ рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдлреЙрд░реНрдордордзреНрдпреЗ рдЕрдЪреВрдХ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреЛрд╕реНрдЯрдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ "рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрд╡рд░реВрдкрд╛рдд рдбреЗрдЯрд╛рдмреЗрд╕рдордзреВрди рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдгреЗ: IntelliJ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ IDE рдХрд╛рдп рдХрд░реВ рд╢рдХрддрд╛рдд").

рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╣ рдСрдкрд░реЗрд╢рдиреНрд╕

рдЖрдореНрд╣реА рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреВ рд╢реЛрдзрд▓реНрдпрд╛рдирдВрддрд░ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╣ рдХрд╛рд╣реАрддрд░реА рдЙрдкрдпреБрдХреНрдд рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ. рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХрдЪ, рдХреАрдмреЛрд░реНрдбрд╡рд░реВрди рдмреЛрдЯреЗ рди рдХрд╛рдврддрд╛.

рд╣реЗ рдЧреБрдкрд┐рдд рдирд╛рд╣реА рдХреА рдлрдХреНрдд рд╕рд╛рд░рдгреА рд╣рдЯрд╡рдгреЗ рдЬрд╡рд│рдЬрд╡рд│ рд╕рд░реНрд╡ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рд╕рдорд╛рди рджрд┐рд╕реЗрд▓:

drop table hr.persons

рдкрд░рдВрддреБ рдЯреЗрдмрд▓рдЪреНрдпрд╛ рдирд┐рд░реНрдорд┐рддреАрд╕рд╣ рддреЗ рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рдмрдирддреЗ. рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддрд╛рд╣реА DBMS (рдЕрдиреЗрдХ NoSQL рд╕рд╣) рдПрдХрд╛ рдХрд┐рдВрд╡рд╛ рджреБрд╕рд░реНтАНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд "рдЯреЗрдмрд▓ рддрдпрд╛рд░" рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдЕрдЧрджреА рдереЛрдбрд╛ рд╡реЗрдЧрд│рд╛ рдЕрд╕реЗрд▓ (рдирд╛рд╡, рд╕реНрддрдВрднрд╛рдВрдЪреА рд╕реВрдЪреА, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░), рдкрд░рдВрддреБ рдЗрддрд░ рддрдкрд╢реАрд▓ рдирд╛рдЯрдХреАрдпрд░рд┐рддреНрдпрд╛ рднрд┐рдиреНрди рдЕрд╕реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддрд╛рдд. рдЕрдВрддрд░реНрдЧрдд рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдЖрдгрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ DBMS рдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛. рдорд╛рдЭреЗ рдЖрд╡рдбрддреЗ рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгрдЬреЗ рдУрд░реЕрдХрд▓ рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рдирдордзреНрдпреЗ "рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░рд╛" рд╕рд┐рдВрдЯреЕрдХреНрд╕рд╕рд╛рдареА рдлрдХреНрдд "рдирдЧреНрди" BNF рдЖрд╣реЗрдд 31 рдкреГрд╖реНрдареЗ рд╡реНрдпрд╛рдкрд╛. рдЗрддрд░ рдбреАрдмреАрдПрдордПрд╕рдордзреНрдпреЗ рдЕрдзрд┐рдХ рдорд╛рдлрдХ рдХреНрд╖рдорддрд╛ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдордзреНрдпреЗ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рдордиреЛрд░рдВрдЬрдХ рдЖрдгрд┐ рдЕрджреНрд╡рд┐рддреАрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕, mysql, рдЭреБрд░рд│, рдХреЕрд╕реЕрдиреНрдбреНрд░рд╛). рджреБрд╕рд░реНтАНрдпрд╛ IDE (рд╡рд┐рд╢реЗрд╖рдд: рдПрдХ рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ) рдордзреАрд▓ рдХреЛрдгрддрд╛рд╣реА рдЧреНрд░рд╛рдлрд┐рдХрд▓ тАЬрд╡рд┐рдЭрд╛рд░реНрдбтАЭ рдпрд╛ рд╕рд░реНрд╡ рдХреНрд╖рдорддрд╛ рдкреВрд░реНрдгрдкрдгреЗ рдХрд╡реНрд╣рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓, рдЖрдгрд┐ рдЬрд░реА рддреЗ рд╢рдХреНрдп рдЕрд╕рд▓реЗ рддрд░реА, рд╣реГрджрдпрд╛рдЪреНрдпрд╛ рдЕрд╢рдХреНрддрд╛рдВрд╕рд╛рдареА рддреЗ рдПрдХ рддрдорд╛рд╢рд╛ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдпреЛрдЧреНрдп рдЖрдгрд┐ рд╡реЗрд│реЗрд╡рд░ рд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд╛рди рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╕рд░реНрд╡ рд╕рд╣рдЬрдкрдгреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА, рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп, рдЗрд╖реНрдЯрддрдо рдЖрдгрд┐ рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рдЖрд░рд╛рдорджрд╛рдпреА рдмрдирд╡рд┐рдгреНрдпрд╛рдЪреА рдЕрдиреБрдорддреА рджреЗрдИрд▓.

рддрд╕реЗрдЪ, рдЕрдиреЗрдХ DBMS рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░рдЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд╕рддрд╛рдд рдЬреЗ рдЗрддрд░ DBMS рдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реАрдд. рд╢рд┐рд╡рд╛рдп, рдЖрдореНрд╣реА рдХреЗрд╡рд│ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╡рд░рдЪ рдирд╡реНрд╣реЗ рддрд░ рдбреАрдмреАрдПрдордПрд╕рд╡рд░ рджреЗрдЦреАрд▓ рдСрдкрд░реЗрд╢рди рдХрд░реВ рд╢рдХрддреЛ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреНрд░рдХреНрд░рд┐рдпрд╛ "рдХрд┐рд▓" рдХрд░рдгреЗ, рдХрд╛рд╣реА рдореЗрдорд░реА рдХреНрд╖реЗрддреНрд░ рдореЛрдХрд│реЗ рдХрд░рдгреЗ, рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдгреЗ, "рдХреЗрд╡рд│ рд╡рд╛рдЪрди" рдореЛрдбрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдгреЗ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА.

рдЖрддрд╛ рдереЛрдбреЗ рдХрд╛рдвреВ

рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╣ рдПрдХ рдЖрдХреГрддреА рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдордзреАрд▓ рд╡рд╕реНрддреВ рдЖрдгрд┐ рдХрдиреЗрдХреНрд╢рди рдПрдХрд╛ рд╕реБрдВрджрд░ рдЪрд┐рддреНрд░рд╛рдд рдкрд╛рд╣рдгреЗ рд╣реЗ рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ. рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддреАрд╣реА рдЧреНрд░рд╛рдлрд┐рдХрд▓ IDE, рд╕реНрд╡рддрдВрддреНрд░ "рдХрдорд╛рдВрдб рд▓рд╛рдЗрди" рдЙрдкрдпреБрдХреНрддрддрд╛, рд╡рд┐рд╢реЗрд╖ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╕рд╛рдзрдиреЗ рдЖрдгрд┐ рдореЙрдбреЗрд▓рд░ рд╣реЗ рдХрд░реВ рд╢рдХрддрд╛рдд. рддреЗ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА "рддреЗ рд╢рдХреНрдп рддрд┐рддрдХреЗ рдЪрд╛рдВрдЧрд▓реЗ" рдХрд╛рд╣реАрддрд░реА рдХрд╛рдврддреАрд▓ рдЖрдгрд┐ рддреБрдореНрд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рдордзреАрд▓ рдХрд╛рд╣реА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд┐рдВрд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕рдордзреАрд▓ рдЪреЗрдХрдмреЙрдХреНрд╕реЗрд╕рдЪреНрдпрд╛ рдорджрддреАрдиреЗ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╡рд░ рдереЛрдбрд╛рд╕рд╛ рдкреНрд░рднрд╛рд╡ рдЯрд╛рдХреВ рд╢рдХрддрд╛.

рдкрд░рдВрддреБ рд╣реА рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рд╕реЛрдкреА, рдЕрдзрд┐рдХ рд▓рд╡рдЪрд┐рдХ рдЖрдгрд┐ рдореЛрд╣рдХ рдЖрдгрд┐ рдЕрд░реНрдерд╛рддрдЪ рдХреЛрдбрдЪреНрдпрд╛ рдорджрддреАрдиреЗ рд╕реЛрдбрд╡рд┐рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдЬрдЯрд┐рд▓рддреЗрдЪреЗ рдЖрд░реЗрдЦрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЕрдиреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ (DOT, GraphML рдЗ.) рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдЪреЗ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдЦреБрд░рд▓реЗрд▓реЗ (GraphViz, PlantUML, Mermaid) рдЕрд╢рд╛ рд╕реВрдЪрдирд╛ рд╡рд╛рдЪреВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рд╡рд┐рд╡рд┐рдз рд╕реНрд╡рд░реВрдкрд╛рдВрдордзреНрдпреЗ рджреГрд╢реНрдпрдорд╛рди рдХрд░реВ рд╢рдХрддрд╛рдд. . рдмрд░рдВ, рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреАрд▓ рдХрдиреЗрдХреНрд╢рдирдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдХрд╢реА рдорд┐рд│рд╡рд╛рдпрдЪреА рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдЪ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ.

PlantUML рдЖрдгрд┐ рд╡рд╛рдкрд░реВрди рд╣реЗ рдХрд╕реЗ рджрд┐рд╕реВ рд╢рдХрддреЗ рдпрд╛рдЪреЗ рдПрдХ рд▓рд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рдпреЗрдереЗ рдЖрд╣реЗ PostgreSQL рд╕рд╛рдареА рдбреЗрдореЛ рдбреЗрдЯрд╛рдмреЗрд╕ (рдбрд╛рд╡реАрдХрдбреЗ рдПрдХ SQL рдХреНрд╡реЗрд░реА рдЖрд╣реЗ рдЬреА 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'

рдЖрдгрд┐ рдЖрдкрдг рдереЛрдбрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓реНрдпрд╛рд╕, рдирдВрддрд░ рдЖрдзрд╛рд░рд┐рдд PlantUML рд╕рд╛рдареА ER рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдкрдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдИрдЖрд░ рдЖрдХреГрддреАрд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрддрд░реА рдорд┐рд│рд╡реВ рд╢рдХрддрд╛:

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 рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддреАрдмрджреНрджрд▓ рдЖрдгрд┐ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрдгрд┐ рдкреВрд░реНрдгрдкрдгреЗ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╣реЗ. рддреНрдпрд╛рдЪ "рд░рдХреНрддрд░рдВрдЬрд┐рдд" рдУрд░реЕрдХрд▓ рдбреАрдмреАрдордзреНрдпреЗ, рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рдмрджреНрджрд▓ рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддреАрд╣реА рдорд╛рд╣рд┐рддреА рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдпрд╛рдВрдордзреВрди рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рд╕рддреНрд░рд╛рдВрдкрд╛рд╕реВрди рдмрдлрд░ рдХреЕрд╢реЗрдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдкрд░реНрдпрдВрдд (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, DBA рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╡рд┐рднрд╛рдЧ "рдирд┐рд░реАрдХреНрд╖рдг"). Postgresql рдордзреНрдпреЗ рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдпрд╛рдВрдЪрд╛ рд╕рдВрдкреВрд░реНрдг рд╕рдореВрд╣ рджреЗрдЦреАрд▓ рдЖрд╣реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реАрдХреНрд╖рдг, рд╡рд┐рд╢реЗрд╖рддрдГ рдЬреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА DBA рдЪреНрдпрд╛ рджреИрдирдВрджрд┐рди рдЬреАрд╡рдирд╛рдд рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдЖрд╣реЗрдд, рдЬрд╕реЗ рдХреА pg_stat_activity, pg_stat_database, pg_stat_bgwriter. MySQL рдХрдбреЗ рдпрд╛рд╕рд╛рдареА рд╡реЗрдЧрд│рд╛ рд╕реНрдХреАрдорд╛ рджреЗрдЦреАрд▓ рдЖрд╣реЗ. рдХрд╛рдордЧрд┐рд░реА_рд╕реНрдХреАрдорд╛. рдП рдЗрди рдореЛрдВрдЧреЛ рдЕрдВрдЧрднреВрдд рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдбреЗрдЯрд╛ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрдЧреНрд░рд╣рд╛рдордзреНрдпреЗ рдПрдХрддреНрд░рд┐рдд рдХрд░рддреЗ system.profile.

рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд▓реЗрдХреНрдЯрд░ (рдЯреЗрд▓реАрдЧреНрд░рд╛рдл, рдореЗрдЯреНрд░рд┐рдХрдмреАрдЯ, рдХрд▓реЗрдХреНрдЯреЗрдб) тАЛтАЛрдЬреЗ рд╕рд╛рдиреБрдХреВрд▓ sql рдХреНрд╡реЗрд░реА рдХрд░реВ рд╢рдХрддрд╛рдд, рдпрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪреЗ рд╕реНрдЯреЛрд░реЗрдЬ (InfluxDB, Elasticsearch, Timescaledb) рдЖрдгрд┐ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭрд░ (Grafana, Kibana) рд╕рд╣ рд╕рд╢рд╕реНрддреНрд░, рддреБрдореНрд╣реА рдЕрдЧрджреА рд╕рд╣рдЬ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛. рдЖрдгрд┐ рдПрдХ рд▓рд╡рдЪрд┐рдХ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЬреА рдЗрддрд░ рд╕рд┐рд╕реНрдЯрдо-рд╡реНрдпрд╛рдкреА рдореЗрдЯреНрд░рд┐рдХреНрд╕рд╕рд╣ рдЬрд╡рд│реВрди рдПрдХрддреНрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓ (рдорд┐рд│рд╡рд▓реЗрд▓реЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди, OS рд╡рд░реВрди рдЗ.). рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЗ pgwatch2 рдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЬреЗ InfluxDB + Grafana рд╕рдВрдпреЛрдЬрди рд╡рд╛рдкрд░рддреЗ рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░рд╢реНрдирд╛рдВрдЪрд╛ рд╕рдВрдЪ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рджреЗрдЦреАрд▓ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рд╕рд╛рдиреБрдХреВрд▓ рдХреНрд╡реЗрд░реА рдЬреЛрдбрд╛.

рдПрдХреВрдг

рдЖрдгрд┐ рдирд┐рдпрдорд┐рдд SQL рдХреЛрдб рд╡рд╛рдкрд░реВрди рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рдп рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдпрд╛рдЪреА рд╣реА рдлрдХреНрдд рдЕрдВрджрд╛рдЬреЗ рдпрд╛рджреА рдЖрд╣реЗ. рдорд▓рд╛ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдгрдЦреА рдмрд░реЗрдЪ рдЙрдкрдпреЛрдЧ рд╕рд╛рдкрдбрддреАрд▓, рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛. рдЖрдгрд┐ рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рд╛рдпрдЪреЗ рдЖрдгрд┐ рдкреБрдврдЪреНрдпрд╛ рд╡реЗрд│реА рддреЗ рддреБрдордЪреНрдпрд╛ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдордзреНрдпреЗ рдХрд╕реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛рдпрдЪреЗ (рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдХрд╛) рдпрд╛рдмрджреНрджрд▓ рдЖрдореНрд╣реА рдмреЛрд▓реВ.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛