
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреНрдп рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ рдиреЗ рдЖрдЬ рддрдХ рдЗрд╕ рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рдХреБрдЫ рднреА рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди 14 рдлрд░рд╡рд░реА рдХреЛ, рд╕рднреА рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рджрд┐рди, рдХрдВрдкрдиреА рдиреЗ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдПрдХ рдЙрдкрд╣рд╛рд░ рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рд╕реАрдорд┐рдд рдЙрдкрд▓рдмреНрдзрддрд╛ рдореЛрдб рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХреАред
рдЪреВрдВрдХрд┐ рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ рдЕрдм .NET рдХреЛрд░ рдкрд░ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рдордВрдЪ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред
рд╕реЗрд╡рд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ .NET рдХреЛрд░ I рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдЬ, PostrgeSQL рд╕рдВрд╕реНрдХрд░рдг 10 рдФрд░ 11 рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред MySQL рдФрд░ Redis рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рд╣реИрдВред
рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рдмрдВрдзрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрд╡рд╛ рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ рдЬреЛ рдХрдИ рдХрдВрдкрдирд┐рдпреЛрдВ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рддреЗ рд╕рдордп рд╕рд╛рдордирд╛ рдХрд░рддреА рд╣реИрдВ:
- рдЗрд╖реНрдЯрддрдо рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг
- рдЖрдкрдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдФрд░ рдбреЗрдЯрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдмрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рдЖрдзрд╛рд░рднреВрдд рд╕рдВрд░рдЪрдирд╛
- рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдз рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ
- рдмреИрдХрдЕрдк рдФрд░ рд░рд┐рдХрд╡рд░реА рд░рдгрдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
- рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛
рдЖрдЬ, рд╕рдмрд╕реЗ рдХреЙрдореНрдкреИрдХреНрдЯ рдмреЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЖрдкрдХреЛ $ 15 рдЦрд░реНрдЪ рд╣реЛрдВрдЧреЗред рд╕рдмрд╕реЗ рдорд╣рдВрдЧреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд▓рд╛рдЧрдд
рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ рджреЛ рд╣рдЬрд╛рд░ рдбреЙрд▓рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдХрдиреЗрдХреНрд╢рди рдкреВрд▓
рдЬрдм рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реАрдзреЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 10 рдПрдордмреА рд░реИрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рддрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдмрдВрдж рди рд╣реЛ рдЬрд╛рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрд▓ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рдЬрдм рд╕рднреА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирдП рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдм рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред
рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ рдЖрдкрдХреЛ PgBouncer рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рдкреВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдХреА рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдирдП рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореБрдХреНрдд рд╣реЛрдиреЗ рддрдХ рд╣реИрдВред
рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдкреВрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдкреВрд▓ рдирд┐рд░реНрдорд╛рдг
рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЖрдкрдХреЛ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдЦреЛрд▓рдиреЗ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдЯреИрдм рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред DigitalOcean рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреВрд▓рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
рд▓реЗрди-рджреЗрдирдпрд╣ рдореЛрдб рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдкреВрд▓ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЗрдирджреЗрди рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЗрдирджреЗрди рдХрддрд╛рд░рдмрджреНрдз рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрди-рджреЗрди рдореЛрдб рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рд╣реИрдВ рдЬреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдХреНрд▓рд╛рдЗрдВрдЯ PostgreSQL рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдкреВрд▓ рд╕реЗ рдЕрдкрдирд╛ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдП рд░рдЦреЗрдВрдЧреЗред
рдЕрдзрд┐рд╡реЗрд╢рдирдпрд╣ рдореЛрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рддрдм рддрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╣рд░ рд╕рдордп рд╕рдВрдмрдВрдз рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдкреВрд▓ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдореМрдЬреВрджрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрддрд╛рд░рдмрджреНрдз рдФрд░ рдХрдиреЗрдХреНрдЯреЗрдб рд╣реЛрддреЗ рд╣реИрдВред
рдХрдердирдпрд╣ рдореЛрдб рд╕рдмрд╕реЗ рд╕рдЦреНрдд рд╣реИ рдФрд░ рдХрддрд╛рд░ рдореЗрдВ рдЕрдЧрд▓реЗ рдЧреНрд░рд╛рд╣рдХ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдореЛрдб рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдирджреЗрди рдПрдХ рдСрдкрд░реЗрдЯрд░ рддрдХ рд╕реАрдорд┐рдд рд╣реИред рдХрдИ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрди-рджреЗрди рдХреЛ рдкреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рд╡рд░рдг рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдкреВрд▓ рдХрдиреЗрдХреНрд╢рди

рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореИрдВ
Npgsql рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛
рд╣реВрдВ , рдЗрд╕рд▓рд┐рдП рдЖрдЧреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрдЧрд╛ред
рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
User ID=xxx;Password=xxxx;Host=xxx.db.ondigitalocean.com;Port=xxx;Database=pool_name;Pooling=false;SslMode=Require;Server Compatibility Mode=Redshift;
рдЖрдкрдХреЛ рдХрд┐рди рдмрд╛рддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдбреЗрдЯрд╛рдмреЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреВрд▓ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рд╣реЛрдЧрд╛ред
- рдкреВрд▓рд┐рдВрдЧ рдХреЛ рдЭреВрдареЗ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреЛ PgBouncer рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рди рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛред
- рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП SslMode рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рд╕рд░реНрд╡рд░ рд╕рдВрдЧрддрддрд╛ рдореЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ Redshift рдорд╛рди рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ PgBouncer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ npgsql рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪ рдЬрд╛рдПрдЧрд╛ред
рдХрдиреЗрдХреНрд╢рди рдХреА рддреИрдпрд╛рд░реА рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
protected async Task<IDbConnection> CreateConnection() { var connection = new NpgsqlConnection(_connectionString) { ProvideClientCertificatesCallback = certificates => { certificates.Add(new X509Certificate2(_cert)); }, UserCertificateValidationCallback = CertificateValidation() }; await connection.OpenAsync(); return connection; } private RemoteCertificateValidationCallback CertificateValidation() => (sender, certificate, chain, errors) => { if (errors == SslPolicyErrors.None) return true; if ((errors & SslPolicyErrors.RemoteCertificateChainErrors) != 0) { var allErrorsIsUntrustedRoot = chain? .ChainStatus .All(o => o.Status == X509ChainStatusFlags.UntrustedRoot); return allErrorsIsUntrustedRoot ?? true; } return true; };
рдпрд╣рд╛рдВ рдпрд╣ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
- рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ ред рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреВрд▓ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡рд╛рдж рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
- рджреВрд╕рд░рд╛ рд╡рд╛рд▓рд╛ ред рдкреВрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЬрд┐рд╕реЗ RemoteCertificateValidationCallback рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рдЫреЛрдЯреА рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд░реВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╕реЗрд╡рд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реАрдорд┐рдд рдЙрдкрд▓рдмреНрдзрддрд╛ рдореЛрдб рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрднреА рднреА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬреЛ рдбреАрдУ рдЯреАрдо рдЕрднреА рддрдХ рдареАрдХ рдирд╣реАрдВ рдХрд░ рдкрд╛рдИ рд╣реИред
рд╕рдВрджрд░реНрдн