{"id":257417,"date":"2015-05-18T15:32:06","date_gmt":"2015-05-18T11:32:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=257417"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=257417","title":{"rendered":"\u041e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 SQL \u0432 Postgres"},"content":{"rendered":"<p>       \u041e\u0434\u043d\u0430 \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u043d\u044f \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0430 ORM, \u043a\u0430\u043a \u043e\u043d\u0438 \u0442\u0430\u043a \u0441\u0442\u0430\u0440\u0430\u044e\u0442\u0441\u044f \u0441\u043a\u0440\u044b\u0442\u044c \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0438\u043b\u0443 \u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL. \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u044f \u043d\u0430\u043f\u0438\u0448\u0443 \u0434\u0430\u043b\u044c\u0448\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e,<a href=\"https:\/\/twitter.com\/fransbouma\"> Frans Bouma <\/a> \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043b \u043c\u043d\u0435 \u0432\u0447\u0435\u0440\u0430, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 ORM \u0438 \u043b\u044e\u0434\u044c\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442. \u042d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (\u0432 ORM) \u0438 \u044f \u0441 \u044d\u0442\u0438\u043c \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0442\u0430\u043a \u0436\u0435 \u044f \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0447\u0442\u043e \u043d\u0435 \u043f\u043b\u043e\u0445\u043e\u0439 \u0444\u0430\u0441\u0442\u0444\u0443\u0434 \u0434\u0435\u043b\u0430\u0435\u0442 \u043b\u044e\u0434\u0435\u0439 \u043f\u043e\u043b\u043d\u044b\u043c\u0438, \u0430 \u044d\u0442\u043e \u043b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0434\u044f\u0442 \u0435\u0433\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b, \u0440\u0443\u0433\u0430\u0442\u044c ORM \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u041e\u041e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u0432 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e: \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e SQL \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043e\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u0430\u043a \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432\u0430\u0448 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 DB \u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u0435\u0442 SQL \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u0432\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043e\u043f\u0438\u0441\u0430\u043d <a href=\"http:\/\/www.postgresql.org\/docs\/9.4\/static\/functions.html\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c, \u043c\u043e\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0438\u0436\u0435, \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e.<\/p>\n<h1>Postgres Built-in Fun<\/h1>\n<p>  \u0421 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0432 Postgres \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0430\u0445\u0430\u0440\u0430 \u0438 \u0441 \u043d\u0438\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0435\u043b\u043e. SQL \u044d\u0442\u043e ANSI \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u2013 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0434\u0440\u0443\u0433\u0443\u044e. Postgres \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u043f\u043e\u0447\u0442\u0438 \u0434\u043e \u0431\u0443\u043a\u0432\u044b, \u043d\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0441 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<h1>\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h1>\n<p>  \u0412 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u041c\u043d\u043e\u0433\u0438\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043a\u043b\u044e\u0447\u0430\u044f <a href=\"https:\/\/msdn.microsoft.com\/en-us\/magazine\/cc163473.aspx\">SQL \u0441\u0435\u0440\u0432\u0435\u0440<\/a> (\u0438\u0437\u0432\u0438\u043d\u0438\u0442\u0435 \u0437\u0430 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 MSDN) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Regex \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0421 Posters \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f PSQL \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0439 Takepub \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445):<\/p>\n<pre><code class=\"sql\">select sku,title from products where title ~* 'master';     sku     |              title ------------+---------------------------------  aspnet4    | Mastering ASP.NET 4.0  wp7        | Mastering Windows Phone 7  hg         | Mastering Mercurial  linq       | Mastering Linq  git        | Mastering Git  ef         | Mastering Entity Framework 4.0  ag         | Mastering Silverlight 4.0  jquery     | Mastering jQuery  csharp4    | Mastering C# 4.0 with Jon Skeet  nhibernate | Mastering NHibernate 2 (10 rows) <\/code><\/pre>\n<p>  \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ~* \u0433\u043e\u0432\u043e\u0440\u0438\u0442: \u0447\u0442\u043e \u0437\u0430 \u043d\u0438\u043c \u0438\u0434\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f POSIX (\u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430)<br \/>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043e\u043f\u0443\u0441\u043a\u0430\u044f *.<br \/>  \u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u0432\u044b \u0431\u044b \u043c\u043e\u0433\u043b\u0438 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432:<\/p>\n<pre><code class=\"sql\">select products.sku, products.title from products where to_tsvector(title) @@ to_tsquery('Mastering');     sku     |              title ------------+---------------------------------  aspnet4    | Mastering ASP.NET 4.0  wp7        | Mastering Windows Phone 7  hg         | Mastering Mercurial  linq       | Mastering Linq  git        | Mastering Git  ef         | Mastering Entity Framework 4.0  ag         | Mastering Silverlight 4.0  jquery     | Mastering jQuery  csharp4    | Mastering C# 4.0 with Jon Skeet  nhibernate | Mastering NHibernate 2 (10 rows) <\/code><\/pre>\n<p>  \u041d\u043e \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. Postgres \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f \u043f\u043e\u043b\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a tsvector. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430\u0436\u0435 \u0438\u043c\u0435\u0442\u044c \u044d\u0442\u0443 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0438 \u044d\u0442\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435 \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u043e \u0432 \u043a\u0430\u043a\u043e\u043c \u0442\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c. \u042f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b title \u043d\u0430\u043b\u0435\u0442\u0443 \u0432 tsvector, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e to_tsvector. \u041e\u043d\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u043a \u043f\u043e\u0438\u0441\u043a\u0443. \u042f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 to_tsquery \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u042d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u00abMastering\u00bb. \u0411\u0438\u0442\u044b @@ \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442\u044c true, \u0435\u0441\u043b\u0438 tsvector \u043f\u043e\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 tsquery. \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0435\u0442 \u0433\u043b\u0430\u0437, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c concat \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438:<\/p>\n<pre><code class=\"sql\">select products.sku, products.title from products where to_tsvector(concat(title,' ',description)) @@ to_tsquery('Mastering');     sku     |              title ------------+---------------------------------  aspnet4    | Mastering ASP.NET 4.0  wp7        | Mastering Windows Phone 7  hg         | Mastering Mercurial  linq       | Mastering Linq  git        | Mastering Git  ef         | Mastering Entity Framework 4.0  ag         | Mastering Silverlight 4.0  jquery     | Mastering jQuery  csharp4    | Mastering C# 4.0 with Jon Skeet  nhibernate | Mastering NHibernate 2 (10 rows) <\/code><\/pre>\n<p>  \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 title \u0438 description \u0432 \u043e\u0434\u043d\u0443 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u0445 \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <a href=\"http:\/\/www.postgresql.org\/docs\/9.4\/static\/textsearch.html\">\u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/a>.<\/p>\n<h1>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f c\u0435\u0440\u0438\u0439<\/h1>\n<p>  \u0415\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f generate_series, \u0432\u044b\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<pre><code class=\"sql\">select * from generate_series(1,10);  generate_series -----------------                1                2                3                4                5                6                7                8                9               10 <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0438\u043f\u0430 random():<\/p>\n<pre><code class=\"sql\">select * from generate_series(1,10,2) order by random();  generate_series -----------------                3                5                7                1                9 (5 rows) <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u0433\u043e\u0432\u043e\u0440\u044f \u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e 2. \u041e\u043d\u0430 \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0434\u0430\u0442\u0430\u043c\u0438:<\/p>\n<pre><code class=\"sql\">select * from generate_series(          '2014-01-01'::timestamp,          '2014-12-01'::timestamp,          '42 days');     generate_series ---------------------  2014-01-01 00:00:00  2014-02-12 00:00:00  2014-03-26 00:00:00  2014-05-07 00:00:00  2014-06-18 00:00:00  2014-07-30 00:00:00  2014-09-10 00:00:00  2014-10-22 00:00:00 (8 rows) <\/code><\/pre>\n<p>  \u042f \u0433\u043e\u0432\u043e\u0440\u044e \u043e \u0434\u0430\u0442\u0430\u0445 2014 \u0433\u043e\u0434\u0430 \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432 42 \u0434\u043d\u044f. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e? \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c alias \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440\u0430 \u043e\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0435\u0440\u0438\u0439, \u0441\u043c\u043e\u0442\u0440\u044f \u0447\u0442\u043e \u0431\u0443\u0434\u0438\u0442\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c:<\/p>\n<pre><code class=\"sql\">select x as first_of_the_month from generate_series('2014-01-01'::timestamp,'2014-12-01'::timestamp,'1 month') as f(x);                                                           first_of_the_month ---------------------  2014-01-01 00:00:00  2014-02-01 00:00:00  2014-03-01 00:00:00  2014-04-01 00:00:00  2014-05-01 00:00:00  2014-06-01 00:00:00  2014-07-01 00:00:00  2014-08-01 00:00:00  2014-09-01 00:00:00  2014-10-01 00:00:00  2014-11-01 00:00:00  2014-12-01 00:00:00 (12 rows) <\/code><\/pre>\n<p>  Alias \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 SQL \u0432\u044b\u0437\u043e\u0432\u043e\u043c.<br \/>  \u0422\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e month. \u042d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b Postgres \u2014 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u0431\u0443\u0434\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445.<\/p>\n<h1>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u0442\u0430\u043c\u0438<\/h1>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0430\u043c\u0438 \u0432 Postgres. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u043d\u0430\u0442\u044c \u0434\u0430\u0442\u0443 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0434\u0435\u043b\u044e:<\/p>\n<pre><code class=\"sql\">select '1 week' + now() as a_week_from_now;         a_week_from_now -------------------------------  2015-03-03 10:08:12.156656+01 (1 row) <\/code><\/pre>\n<p>  Postgres \u0432\u0438\u0434\u0438\u0442 <b>now () <\/b> \u043a\u0430\u043a timestamp \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 (<b>+<\/b>) \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 &#8216;1 week&#8217; \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <i>12015-05-06 17:59:30.587874<\/i> \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c. <br \/>  \u042d\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442 \u043c\u043d\u0435 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0430\u0442\u0443 \u0438 \u0432\u0440\u0435\u043c\u044f \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0418 \u0442\u0430\u043a \u0436\u0435 \u0442\u0430\u0439\u043c\u0437\u043e\u043d\u0443 (+1 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0418\u0442\u0430\u043b\u0438\u0438 ) \u0415\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430 \u043b\u0438\u0431\u043e \u0431\u043e\u0440\u043e\u043b\u0438\u0441\u044c \u0441 \u0434\u0430\u0442\u0430\u043c\u0438 \u0432 UTC, \u0442\u043e \u0437\u043d\u0430\u0435\u0442\u0435 \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0431\u043e\u043b\u044c. Postgres \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 timestamptz \u0442\u0438\u043f \u2013 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043a\u0443 \u0441 \u0447\u0430\u0441\u043e\u0432\u044b\u043c \u043f\u043e\u044f\u0441\u043e\u043c) \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u0441\u0447\u0435\u0442 \u0434\u0430\u0442\u044b.<br \/>   \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0445\u043e\u0447\u0443 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443 Postgres \u043a\u0430\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u041a\u0430\u043b\u0438\u0444\u043e\u0440\u043d\u0438\u0438:<\/p>\n<pre><code class=\"sql\">SELECT now() AT TIME ZONE 'PDT' as cali_time;          cali_time ----------------------------  2015-02-24 02:16:57.884518 (1 row) <\/code><\/pre>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 interval \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f timesamp. \u0412 \u0447\u0430\u0441\u0430 2 \u0443\u0442\u0440\u0430 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0437\u0432\u043e\u043d\u0438\u0442\u044c Jon Galloway \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0433\u043e SQL \u0441\u0435\u0440\u0432\u0435\u0440 \u0433\u043e\u0440\u0438\u0442 \u0432 \u043e\u0433\u043d\u0435. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0447\u0430\u0441\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043c\u043d\u043e\u0439 \u0438 \u0414\u0436\u043e\u043d\u043e\u043c:<\/p>\n<pre><code class=\"sql\">select now() - now() at time zone 'PDT' as cali_diff;  cali_diff -----------  08:00:00 (1 row) <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u043e\u0442\u043c\u0435\u0442\u043a\u043e\u0439 8 \u0447\u0430\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u043c. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0412\u0440\u0435\u043c\u044f \u0432\u0435\u0449\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432 \u043c\u043e\u0435\u0439 Takepub \u0431\u0430\u0437\u0435 \u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u043a\u043e\u0433\u0434\u0430 \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0437\u0430\u043a\u0430\u0437\u044b. \u0415\u0441\u043b\u0438 20 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u0438 \u043f\u043e\u0434 \u043a\u043e\u043d\u0435\u0446 \u0433\u043e\u0434\u0430, \u043c\u043e\u0435\u043c\u0443 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0443 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u043a\u0430\u0437\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u043f\u043e\u0437\u0436\u0435 1 \u042f\u043d\u0432\u0430\u0440\u044f 2013 \u0433\u043e\u0434\u0430. \u041c\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u041d\u044c\u044e \u0419\u043e\u0440\u043a\u0435 \u043c\u043e\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0413\u0430\u0432\u0430\u044f\u0445.<br \/>  \u042d\u0442\u0438 \u0432\u0430\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0432 Postgres: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0430\u043c\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u044b.<\/p>\n<h1>\u0410\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f<\/h1>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0435\u0439 \u0432 Postgres \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c. \u0412\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043d\u0435\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 GROUP BY \u0432 \u0432\u0430\u0448\u0435\u043c SELECT \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0437\u0430 \u043c\u0435\u0441\u044f\u0446, \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u044e \u0432\u044b \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0435\u0441\u044c \u0432 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432:<\/p>\n<pre><code class=\"sql\">select sku, sum(price),  date_part('month',created_at) from invoice_items group by sku,date_part('month',created_at) having date_part('month',created_at) = 9 <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043b\u0443\u0447\u0448\u0435 \u0431\u0443\u0434\u0443\u0449\u0435\u043c Postgres \u2014 \u043e\u043a\u043e\u043d\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"sql\">select distinct sku, sum(price) OVER (PARTITION BY sku) from invoice_items where date_part('month',created_at) = 9 <\/code><\/pre>\n<p>  \u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435(\u043e\u043a\u043e\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 SQL \u0441\u0435\u0440\u0432\u0435\u0440\u0435).<br \/>  \u0417\u0434\u0435\u0441\u044c \u044f \u0434\u0435\u043b\u0430\u044e \u043d\u0430\u0431\u043e\u0440 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432, \u0443\u043a\u0430\u0437\u0430\u0432 \u0447\u0442\u043e \u044f \u0445\u043e\u0447\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e SUM \u043d\u0430\u0434 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c DISTINCT \u0437\u0434\u0435\u0441\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u044b\u0434\u0430\u043b \u0431\u044b \u0432\u0441\u0435 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043b\u0438 SELECT \u0437\u0430\u043f\u0440\u043e\u0441.<br \/>  \u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043a\u043e\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438:<\/p>\n<pre><code class=\"sql\">select distinct sku, sum(price) OVER (PARTITION BY sku) as revenue, count(1) OVER (PARTITION BY sku) as sales_count from invoice_items where date_part('month',created_at) = 9 <\/code><\/pre>\n<p>  \u0414\u0430\u0435\u0442 \u043c\u043d\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0430\u0436 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043f\u043e\u043b\u044e sku \u0438 \u0434\u043e\u0445\u043e\u0434\u044b. \u042f \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0433\u0443 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043e\u0431\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u0436 \u0432 \u043c\u0435\u0441\u044f\u0446 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435:<\/p>\n<pre><code class=\"sql\">select distinct sku,  sum(price) OVER (PARTITION BY sku) as revenue, count(1) OVER (PARTITION BY sku) as sales_count, sum(price) OVER (PARTITION by 0) as sales_total from invoice_items where date_part('month',created_at) = 9 <\/code><\/pre>\n<p>  \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e PARTITTION BY 0, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0433\u043e\u0432\u043e\u0440\u044f, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u201c\u0432\u0435\u0441\u044c \u043d\u0430\u0431\u043e\u0440 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u201d \u044d\u0442\u043e \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0432 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435\u2026 \u0418 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u044d\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 CTE (<a href=\"http:\/\/rob.conery.io\/2015\/02\/09\/inserting-using-new-record-postgres\/\">a Common Table Expression<\/a>\u00a0) \u044f \u043c\u043e\u0433\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"sql\">with september_sales as (     select distinct sku,      sum(price) OVER (PARTITION BY sku) as revenue,     count(1) OVER (PARTITION BY sku) as sales_count,     sum(price) OVER (PARTITION by 0) as sales_total     from invoice_items     where date_part('month',created_at) = 9 )  select sku,      revenue::money,      sales_count,      sales_total::money,     trunc((revenue\/sales_total * 100),4) as percentage from september_sales <\/code><\/pre>\n<p>  \u0412 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c select \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043f\u043e\u043b\u044f revenue \u0438 sales_total \u043a\u0430\u043a \u0442\u0438\u043f money \u2013 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0432\u0430\u043b\u044e\u0442\u044b. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u0441\u0435\u043e\u0431\u044a\u0435\u043c\u043b\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0434\u0430\u0436 \u2013 \u044f \u043f\u043e\u043b\u0443\u0447\u0430\u044e \u043e\u0431\u0449\u0438\u0439 sku, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0434\u0430\u0436 \u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u044b \u043e\u0442 \u043f\u0440\u043e\u0434\u0430\u0436 \u0432 \u043c\u0435\u0441\u044f\u0446, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 SQL. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e trunc CTE, \u0447\u0442\u043e\u0431\u044b \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u0442\u044c \u0434\u043e 4\u0445. \u0437\u043d\u0430\u0447\u043d\u044b\u0445 \u0446\u0438\u0444\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438.<\/p>\n<h1>\u0421\u0442\u0440\u043e\u043a\u0438<\/h1>\n<p>  \u042f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432\u0430\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u0438 \u043d\u0430\u0434 Regex. \u041d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0434 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432 Postgres. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e:<\/p>\n<pre><code class=\"sql\">select products.sku,      products.title,      downloads.list_order,      downloads.title  as episode from products inner join downloads on downloads.product_id = products.id order by products.sku, downloads.list_order; <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u043e\u0438 \u0432\u0438\u0434\u0435\u043e \u0438 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438) \u044f \u043c\u043e\u0433 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043f\u0438\u0437\u043e\u0434\u044b? \u042f \u043c\u043e\u0433\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e. \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2013 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438:<\/p>\n<pre><code class=\"sql\">select products.sku,      products.title,      string_agg(downloads.title, ', ') as downloads from products inner join downloads on downloads.product_id = products.id group by products.sku, products.title order by products.sku <\/code><\/pre>\n<p>  string_agg \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a String.join()\u00a0 \u0432 \u0432\u0430\u0448\u0435\u043c \u043b\u044e\u0431\u0438\u043c\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u041d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0432 \u0447\u0435\u0440\u0435\u0437 concat \u0430 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432:<\/p>\n<pre><code class=\"sql\">select products.sku,      products.title,      array_agg(concat(downloads.list_order,') ',downloads.title)) as downloads from products inner join downloads on downloads.product_id = products.id group by products.sku, products.title order by products.sku <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e array_agg \u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 list_order \u0438 title \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u044c\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432.<br \/>  \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e concat \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f list_order.<br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Node.Js \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043d\u0435\u043c\u0443 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c.<br \/>  \u0422\u0430\u043a \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Node, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c JSON:<\/p>\n<pre><code class=\"sql\">select products.sku,      products.title,      json_agg(downloads) as downloads from products inner join downloads on downloads.product_id = products.id group by products.sku, products.title order by products.sku <\/code><\/pre>\n<p>  \u0413\u0434\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0431\u0438\u0442\u043e\u0432 (\u0442.\u0435 \u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439) \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0433\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c JSON.<\/p>\n<h1> \u0412\u044b\u0432\u043e\u0434\u044b<\/h1>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 SQL \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u0432\u0430\u0448\u0438 \u043b\u044e\u0431\u0438\u043c\u0430\u044f \u0421\u0423\u0411\u0414 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u2013 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u044d\u0442\u043e\u0439 \u043d\u0435\u0434\u0435\u043b\u0435\u0439 \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435.   \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/258153\/\"> http:\/\/habrahabr.ru\/post\/258153\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041e\u0434\u043d\u0430 \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u043d\u044f \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0430 ORM, \u043a\u0430\u043a \u043e\u043d\u0438 \u0442\u0430\u043a \u0441\u0442\u0430\u0440\u0430\u044e\u0442\u0441\u044f \u0441\u043a\u0440\u044b\u0442\u044c \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0438\u043b\u0443 \u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL. \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u044f \u043d\u0430\u043f\u0438\u0448\u0443 \u0434\u0430\u043b\u044c\u0448\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e,<a href=\"https:\/\/twitter.com\/fransbouma\"> Frans Bouma <\/a> \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043b \u043c\u043d\u0435 \u0432\u0447\u0435\u0440\u0430, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 ORM \u0438 \u043b\u044e\u0434\u044c\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442. \u042d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (\u0432 ORM) \u0438 \u044f \u0441 \u044d\u0442\u0438\u043c \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0442\u0430\u043a \u0436\u0435 \u044f \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0447\u0442\u043e \u043d\u0435 \u043f\u043b\u043e\u0445\u043e\u0439 \u0444\u0430\u0441\u0442\u0444\u0443\u0434 \u0434\u0435\u043b\u0430\u0435\u0442 \u043b\u044e\u0434\u0435\u0439 \u043f\u043e\u043b\u043d\u044b\u043c\u0438, \u0430 \u044d\u0442\u043e \u043b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0434\u044f\u0442 \u0435\u0433\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b, \u0440\u0443\u0433\u0430\u0442\u044c ORM \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u041e\u041e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u0432 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e: \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e SQL \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043e\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-257417","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/257417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=257417"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/257417\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=257417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=257417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=257417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}