{"id":386736,"date":"2024-06-29T06:54:14","date_gmt":"2024-06-29T06:54:14","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=386736"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=386736","title":{"rendered":"<span>\u041a\u041b\u0410\u0414\u0420\u0438\u0440\u0443\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b (\u0447.1 \u2014 \u0438\u043c\u043f\u043e\u0440\u0442)<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0432\u0432\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 <strong>\u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u043c\u0443, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u044c<\/strong>, \u0430 \u043f\u043e\u0442\u043e\u043c &#8212; \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e <strong>\u0441\u0442\u0440\u043e\u043a\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u043e-\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0432\u0438\u0434<\/strong>.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u0432\u0438\u0434\u043e\u043c \u0443 \u043d\u0430\u0441 \u0432 \u0441\u0442\u0440\u0430\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9_%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8\">\u041a\u041b\u0410\u0414\u0420<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/fias.nalog.ru\/\">\u0424\u0418\u0410\u0421<\/a>.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0430\u044e\u0449\u0438\u043c, \u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 &#171;\u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e&#187;, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 SQL.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/698\/24d\/3c9\/69824d3c911c0a1797baf2a095fa64fe.png\" width=\"244\" height=\"206\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/698\/24d\/3c9\/69824d3c911c0a1797baf2a095fa64fe.png\"\/><figcaption><\/figcaption><\/figure>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u041a\u041b\u0410\u0414\u0420<\/h2>\n<p>\u0411\u0430\u0437\u0430 \u041a\u041b\u0410\u0414\u0420 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0424\u041d\u0421 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"https:\/\/www.gnivc.ru\/technical_support\/classifiers_reference\/kladr\/\">\u0413\u041d\u0418\u0412\u0426<\/a> \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e) \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f <code>wget, p7zip, dbview, recode \u0438 psql<\/code>.<\/p>\n<h4>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432<\/h4>\n<p>\u0411\u0430\u0437\u0430 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0413\u041d\u0418\u0412\u0426 <strong>\u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443<\/strong> \u0432 \u0432\u0438\u0434\u0435 7z-\u0430\u0440\u0445\u0438\u0432\u0430 <a href=\"https:\/\/gnivc.ru\/html\/gnivcsoft\/KLADR\/Base.7z\">Base.7z<\/a> &#8212; \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c <code>Last-Modified<\/code> \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0440\u0432\u043d\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <code>HEAD<\/code>-\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0443\u0432\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0435\u0436\u0435\u0441\u0443\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"bash\">wget -S https:\/\/gnivc.ru\/html\/gnivcsoft\/KLADR\/Base.7z --limit-rate=8k 2>.hdr<\/code><\/pre>\n<p>\u0412 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c <code>.hdr<\/code> \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430:<\/p>\n<pre><code>...   Last-Modified: Thu, 05 Aug 2021 09:28:39 GMT ...<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e, \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 \u043d\u0435\u0439 \u044d\u0442\u043e\u0442 \u0442\u0430\u0439\u043c\u0441\u0442\u0430\u043c\u043f \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0442\u0430\u0439\u043c\u0441\u0442\u0430\u043c\u043f \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c, \u0440\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432:<\/p>\n<pre><code class=\"bash\">p7zip -d Base.7z<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 7 DBF-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 DOS-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435:<\/p>\n<pre><code>Extracting  ALTNAMES.DBF Extracting  DOMA.DBF Extracting  FLAT.DBF Extracting  KLADR.DBF Extracting  NAMEMAP.DBF Extracting  SOCRBASE.DBF Extracting  STREET.DBF<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0435\u0434\u0438\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 <code>psql<\/code> \u0432 COPY-\u0444\u043e\u0440\u043c\u0430\u0442\u0435:<\/p>\n<pre><code class=\"bash\"># \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u043b\u0435\u0439 DBF #   | DOS2WIN #   | \u0431\u0435\u0440\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 (skip 2 \u0441\u0442\u0440\u043e\u043a\u0438) #   | \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0438\u043c\u0435\u043d\u0430 dbview -b -t -e -o -r ALTNAMES.DBF \\   | recode CP866..CP1251 \\   | tail -n+2 \\   | xargs -l \\   | egrep -io \"^[a-z0-9_]+\"  # ... \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c SQL-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b  # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 DBF, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 '~' #   | \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \"\u0432\u0438\u0441\u044f\u0449\u0438\u0435\" \u0441\u0442\u0440\u043e\u043a\u0438 ([\\t\\r\\n] \u0432 \u0442\u0435\u043b\u0435 \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445) #   | DOS2WIN #   | \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 '\\t', \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0446\u0435\u0432\u044b\u0435 '~', \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c '~'->'\\t' dbview -d~ -b -t ALTNAMES.DBF \\   | sed -e :a -e '\/[\\r\\t]$\/N; s\/[\\r\\t]\\n\/\/g; ta' \\   | recode CP866..CP1251 \\   | sed -e 's\/\\t\/\/g; s\/~\\r\/\/g; s\/~,\/,\/g; s\/~\/\\t\/g' >>.sql<\/code><\/pre>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439-\u0431\u043e\u043b\u044c\u0448\u043e\u0439 SQL-\u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"sql\">CREATE TEMPORARY TABLE \"STREET.DBF\"(   \"NAME\"     varchar,   \"SOCR\"     varchar,   \"CODE\"     varchar,   \"INDEX\"     varchar,   \"GNINMB\"     varchar,   \"UNO\"     varchar,   \"OCATD\"     varchar ); COPY \"STREET.DBF\"(   \"NAME\",   \"SOCR\",   \"CODE\",   \"INDEX\",   \"GNINMB\",   \"UNO\",   \"OCATD\" ) FROM stdin; \u0410\u0431\u0430\u0434\u0437\u0435\u0445\u0441\u043a\u0430\u044f     \u0443\u043b      01000001000000100       385013  0105            79401000000 \u0410\u0431\u0440\u0438\u043a\u043e\u0441\u043e\u0432\u0430\u044f     \u0443\u043b      01000001000000200       385013  0105            79401000000 \u0410\u0432\u0438\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439     \u043f\u0435\u0440     01000001000000300       385006  0105            79401000000 \u0410\u0432\u0442\u043e\u0434\u043e\u0440\u043e\u0433\u0430 7    \u0443\u043b      01000001000000400       385019  0105            79401000000 ...<\/code><\/pre>\n<h2>\u0418\u043c\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0430\u0440\u0445\u0438\u0432\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 DOS-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435, \u043d\u043e \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0436 \u043d\u0435\u043c\u043e\u0434\u043d\u043e, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0435\u043c \u043d\u0430\u0448\u0443 \u0431\u0430\u0437\u0443 \u0432 WIN1251 &#8212; \u043e\u043d\u0430 \u0442\u043e\u0436\u0435 \u043e\u0434\u043d\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0441\u0442\u0430\u043d\u0443\u0442 \u0442\u044f\u0436\u0435\u043b\u0435\u0435:<\/p>\n<pre><code class=\"sql\">CREATE DATABASE kladr   WITH ENCODING='WIN1251'     OWNER=postgres     TEMPLATE=template0     LC_COLLATE='ru_RU.CP1251'     LC_CTYPE='ru_RU.CP1251'     CONNECTION LIMIT=-1;<\/code><\/pre>\n<pre><code class=\"sql\">-- \u043b\u043e\u0433 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 CREATE TABLE kladr_chk(   id     serial       PRIMARY KEY,   ts     timestamp       DEFAULT now(),   hostname     varchar );  -- \u043b\u043e\u0433 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 CREATE TABLE kladr_upd(   id     serial       PRIMARY KEY,   ts     timestamp       DEFAULT now(),   lm     varchar,   hostname     varchar );<\/code><\/pre>\n<h4>\u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/h4>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u043c\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0413\u041d\u0418\u0412\u0426 \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 (\u043c\u0430\u043b\u043e \u043b\u0438, \u043e\u0434\u0438\u043d \u0438\u0437 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u043f\u0440\u0438\u043a\u0430\u0436\u0435\u0442 \u0434\u043e\u043b\u0433\u043e \u0436\u0438\u0442\u044c), \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u0437\u0430\u0449\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0438 &#8212; \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 <code>.sql<\/code>:<\/p>\n<pre><code class=\"sql\">-- \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0430\u0432\u0442\u043e\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 SET statement_timeout = 0; -- \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c WIN-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 SET client_encoding = 'WIN1251'; -- \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c application_name \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 SET application_name = 'kladr : import [`hostname`]'; -- \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \"\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435\" \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;   -- \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e upd-\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \"\u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f\" \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439   LOCK TABLE kladr_upd IN EXCLUSIVE MODE NOWAIT;   -- \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a   INSERT INTO kladr_chk(hostname) VALUES('`hostname`');   -- \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c Last-Modified \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0431\u0430\u0437\u0435   SELECT lm FROM kladr_upd ORDER BY id DESC LIMIT 1;   -- \u0435\u0441\u043b\u0438 lm \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442     -- \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e DBF     CREATE TEMPORARY TABLE ...;     COPY ... FROM stdin;     ...     \\.     --     -- \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \"\u0432\u0435\u0440\u0441\u0438\u044e\" \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b     INSERT INTO kladr_upd(lm, hostname) VALUES('$lm', '`hostname`'); COMMIT;<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0435\u043c, \u043a\u0442\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439, \u0438 \u043a\u043e\u043c\u0443 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442:<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u043d\u043e\u0433\u043e bash-\u043a\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">#!\/bin\/sh  . `dirname \"$0\"`\/..\/app.conf  echo \"`date '+%F %T'` ==== Connecting to DB : $pghost:$pgport:$pgbase:$pguser\" # \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414 psql -t -c 'SELECT 1' -h $pghost -p $pgport -U $pguser -w $pgbase 1>\/dev\/null 2>\/dev\/null rv=\"$?\" if [ \"$rv\" != \"0\" ]; then   echo \"$pghost:$pgport:$pgbase:$pguser:$pgpass\" >>~\/.pgpass   chmod 0600 ~\/.pgpass   psql -t -c 'SELECT 1' -h $pghost -p $pgport -U $pguser -w $pgbase 1>\/dev\/null 2>\/dev\/null   rv=\"$?\" fi  if [ \"$rv\" != \"0\" ]; then   echo \"DB not connected : $pghost:$pgport:$pgbase:$pguser\"   exit 1 fi  # \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 _dbf #_dbf=`mktemp -d` mkdir .\/dbf &amp;&amp; chmod 777 .\/dbf _dbf=`readlink -f .\/dbf` rm -rf ${_dbf} 2>\/dev\/null mkdir ${_dbf} 2>\/dev\/null touch ${_dbf}\/.sql dir=`dirname \"$0\"` dir=`readlink -f $dir`  ## \u0438\u043c\u043f\u043e\u0440\u0442 \u0431\u0430\u0437\u044b \u041a\u041b\u0410\u0414\u0420'\u0430 \u0432 _dbf\/.sql # \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0430\u0432\u0442\u043e\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 echo \"SET statement_timeout = 0;\" >>${_dbf}\/.sql # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c WIN-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 echo \"SET client_encoding = 'WIN1251';\" >>${_dbf}\/.sql # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c application_name \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 echo \"SET application_name = 'kladr : import [`hostname`]';\" >>${_dbf}\/.sql # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \"\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435\" \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 echo \"BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;\" >>${_dbf}\/.sql # \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e upd-\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \"\u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f\" \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 echo \"LOCK TABLE kladr_upd IN EXCLUSIVE MODE NOWAIT;\" >>${_dbf}\/.sql # \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a echo \"INSERT INTO kladr_chk(hostname) VALUES('`hostname`');\" >>${_dbf}\/.sql  # \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 #tmp=`mktemp -d` mkdir .\/tmp &amp;&amp; chmod 777 .\/tmp tmp=`readlink -f .\/tmp` cd $tmp  echo \"`date '+%F %T'` ==== Downloading : $source\" # \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0430\u0437\u044b \u041a\u041b\u0410\u0414\u0420'\u0430 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0431\u0435\u0437 wget -S $source --limit-rate=8k 2>.hdr # wget -S $source 2>.hdr  echo \"`date '+%F %T'` ==== Comparing 'Last-Modified'\" rc=`cat .hdr | egrep 'HTTP\/[0-9]\\.[0-9] [0-9]{3}' | sed -e 's\/^[ ]*HTTP\\\/[0-9]\\.[0-9][ ]*\\([0-9]*\\).*$\/\\1\/i' | egrep -v '301' | head -1` lm=`cat .hdr | egrep 'Last-Modified' | sed -e 's\/^[ ]*Last-Modified:[ ]*\/\/i' | head -1` echo \"  -- HTTP code : $rc\" echo \"  -- HTTP 'Last-Modified' : $lm\" pglm=`psql -h $pghost -p $pgport -U $pguser -w -t -c 'SELECT lm FROM kladr_upd ORDER BY id DESC LIMIT 1' $pgbase | sed -e 's\/^[ ]*\/\/i'` echo \"  -- PGDB 'Last-Modified' : $pglm\"  if [ \"$rc\" = \"200\" ] &amp;&amp; [ \"$lm\" != \"\" ] &amp;&amp; [ \"$lm\" != \"$pglm\" ]; then   # \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0431\u0430\u0437\u044b   echo \"`date '+%F %T'` ==== Unpacking 7z\"   p7zip -d Base.7z 1>\/dev\/null 2>\/dev\/null   cp $tmp\/* ${_dbf}   cd $dir    echo \"`date '+%F %T'` ==== Processing DBF\"   # \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0441\u0435\u0445 .DBF   for dbf in `find ${_dbf} -maxdepth 1 -iname '*.DBF'`; do     dbfn=`basename $dbf | tr '[:lower:]' '[:upper:]'`     # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432     echo \"  -- DBF : $dbfn\"     echo \"    -- header\"     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u043b\u0435\u0439 DBF | DOS2WIN | \u0431\u0435\u0440\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 (skip 2 \u0441\u0442\u0440\u043e\u043a\u0438) | \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0438\u043c\u0435\u043d\u0430     fld=`dbview -b -t -e -o -r $dbf | recode CP866..CP1251 | tail -n+2 | xargs -l | egrep -io \"^[a-z0-9_]+\"`     echo \"CREATE TEMPORARY TABLE \\\"$dbfn\\\"(\" >>${_dbf}\/.sql     fl=\"0\"     for i in ${fld}; do       [ \"$fl\" = \"1\" ] &amp;&amp; echo ',' >>${_dbf}\/.sql       echo -n \"  \\\"$i\\\"\\n    varchar\" >>${_dbf}\/.sql       fl=\"1\"     done     echo \");\" >>${_dbf}\/.sql     # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445     echo \"    -- data\"     echo \"COPY \\\"$dbfn\\\"(\" >>${_dbf}\/.sql     fl=\"0\"     for i in ${fld}; do       [ \"$fl\" = \"1\" ] &amp;&amp; echo ',' >>${_dbf}\/.sql       echo -n \"  \\\"$i\\\"\" >>${_dbf}\/.sql       fl=\"1\"     done     echo \") FROM stdin;\" >>${_dbf}\/.sql     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 DBF, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 '~' | \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \"\u0432\u0438\u0441\u044f\u0449\u0438\u0435\" \u0441\u0442\u0440\u043e\u043a\u0438 ([\\t\\r\\n] \u0432 \u0442\u0435\u043b\u0435 \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445) | DOS2WIN | \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 '\\t' | \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0446\u0435\u0432\u044b\u0435 ';' | \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c ';'->'\\t'     dbview -d~ -b -t $dbf | sed -e :a -e '\/[\\r\\t]$\/N; s\/[\\r\\t]\\n\/\/g; ta' | recode CP866..CP1251 | sed -e 's\/\\t\/\/g; s\/~\\r\/\/g; s\/~,\/,\/g; s\/~\/\\t\/g' >>${_dbf}\/.sql     echo \"\\\\.\" >>${_dbf}\/.sql   done    # \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b - \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 sql-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0430   ls ${dir}\/import\/*.sql | xargs -l readlink -f | xargs -l -I{} cat {} >>${_dbf}\/.sql   # \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043c\u0435\u0442\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f   echo \"INSERT INTO kladr_upd(lm, hostname) VALUES('$lm', '`hostname`');\" >>${_dbf}\/.sql fi echo \"COMMIT;\" >>${_dbf}\/.sql  cd $dir rm -rf $tmp  echo \"`date '+%F %T'` ==== Processing SQL\" psql -h $pghost -p $pgport -U $pguser -w -f ${_dbf}\/.sql $pgbase rv=\"$?\"  if [ \"$rv\" = \"0\" ]; then   rm -rf ${_dbf}\/ 2>\/dev\/null fi echo \"`date '+%F %T'` ==== Exit : $rv\"  exit \"$rv\"<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 <code>mktemp<\/code>, \u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442 \u043b\u0438 \u0443 \u0432\u0430\u0441 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 <code>tmp<\/code>-\u0440\u0430\u0437\u0434\u0435\u043b\u0435?..<\/p>\n<p>\u0420\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0431\u0430\u0437\u0435 \u0438 \u041a\u041b\u0410\u0414\u0420-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 <code>app.conf<\/code>:<\/p>\n<pre><code>pghost=\"kladr.tensor.ru\" pgport=\"5432\" pguser=\"postgres\" pgpass=\"postgres\" pgbase=\"kladr\" source=\"https:\/\/gnivc.ru\/html\/gnivcsoft\/KLADR\/Base.7z\"<\/code><\/pre>\n<h2>\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430<\/h2>\n<p>\u0410 \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430? \u0427\u0435\u043c \u043d\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u041a\u041b\u0410\u0414\u0420-\u0430\u0440\u0445\u0438\u0432\u0435?<\/p>\n<ul>\n<li>\n<p>\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0443\u043b\u0438\u0446 \u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432) \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445<\/p>\n<\/li>\n<li>\n<p>\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430\/\u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (00, 51, &#8230;) \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0435\u0433\u043e \u043a\u043e\u0434\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u041a\u041b\u0410\u0414\u0420, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"https:\/\/www.gnivc.ru\/html\/gnivcsoft\/KLADR\/DOCUM.ARJ\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434 <code>\u0421\u0421 \u0420\u0420\u0420 \u0413\u0413\u0413 \u041f\u041f\u041f \u0423\u0423\u0423\u0423 \u0410\u0410<\/code><strong>,\u00a0<\/strong>\u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p>\u0421\u0421 &#8212; \u043a\u043e\u0434 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0430 \u0420\u0424 (\u0440\u0435\u0433\u0438\u043e\u043d\u0430)<\/p>\n<\/li>\n<li>\n<p>\u0420\u0420\u0420 &#8212; \u043a\u043e\u0434 \u0440\u0430\u0439\u043e\u043d\u0430<\/p>\n<\/li>\n<li>\n<p>\u0413\u0413\u0413 &#8212; \u043a\u043e\u0434 \u0433\u043e\u0440\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>\u041f\u041f\u041f &#8212; \u043a\u043e\u0434 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u0423\u0423\u0423\u0423 &#8212; \u043a\u043e\u0434 \u0443\u043b\u0438\u0446\u044b (\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432)<\/p>\n<\/li>\n<li>\n<p>\u0410\u0410 &#8212; \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435, \u0442\u043e \u0443 \u043a\u043e\u0434\u043e\u0432 \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u043e\u0440\u043e\u0434\u043e\u0432) <strong>\u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043d\u0443\u043b\u0438<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u043e\u0442\u0441\u0435\u0447\u044c. \u0418 \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u043b\u0438\u043d \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 &#171;\u0443\u0440\u043e\u0432\u043d\u0435\u043c&#187; \u043e\u0431\u044a\u0435\u043a\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>2 &#8212; \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0438 \u0433\u043e\u0440\u043e\u0434\u0430 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f (<code>77<\/code> &#8212; \u0433. \u041c\u043e\u0441\u043a\u0432\u0430, <code>76<\/code> &#8212; \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b.)<\/p>\n<\/li>\n<li>\n<p>5 &#8212; \u0440\u0430\u0439\u043e\u043d\u044b (<code>76 001<\/code> &#8212; \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b., \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0438\u0439 \u0440-\u043d)<\/p>\n<\/li>\n<li>\n<p>8 &#8212; \u0433\u043e\u0440\u043e\u0434\u0430 (<code>76 000 001<\/code> &#8212; \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b., \u0433. \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u043b\u044c)<\/p>\n<\/li>\n<li>\n<p>11 &#8212; \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b (<code>76 001 000 008<\/code> &#8212; \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b., \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0438\u0439 \u0440-\u043d, \u0434.\u0410\u043b\u0435\u0448\u043a\u043e\u0432\u043e)<\/p>\n<\/li>\n<li>\n<p>15 &#8212; \u0443\u043b\u0438\u0446\u044b (<code>76 001 000 008 0001<\/code> &#8212; \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b., \u042f\u0440\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0438\u0439 \u0440-\u043d, \u0434.\u0410\u043b\u0435\u0448\u043a\u043e\u0432\u043e, \u0443\u043b.\u041c\u0430\u043b\u0438\u043d\u043e\u0432\u0430\u044f)<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, <strong>\u043a\u043e\u0434\u044b &#171;\u0432\u044b\u0448\u0435\u0441\u0442\u043e\u044f\u0449\u0438\u0445&#187; \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430\u043c\u0438 \u043a\u043e\u0434\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445<\/strong>.<\/p>\n<p>\u0427\u0442\u043e \u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435?<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/efe\/5e7\/d00\/efe5e7d003d2bd17be4631dab0294173.png\" width=\"607\" height=\"381\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/efe\/5e7\/d00\/efe5e7d003d2bd17be4631dab0294173.png\"\/><figcaption><\/figcaption><\/figure>\n<pre><code class=\"sql\">-- \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 CREATE TABLE kladr(   code     varchar,   status     varchar,   name     varchar,   abbr     varchar,   idx     varchar,   ifns     varchar,   ocato     varchar,   lvl     smallint,   norm     varchar,   PRIMARY KEY(code, status) ); -- \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443 CREATE INDEX \"kladr-idx\"   ON kladr(idx); -- \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 CREATE INDEX \"kladr-nm\"   ON kladr(length(code), code varchar_pattern_ops, lower(name));  -- \u0434\u043e\u043c\u0430, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c CREATE TABLE kladr_house(   code     varchar,   codeExt     varchar,   name     varchar,   idx     varchar,   ifns     varchar,   ocato     varchar,   PRIMARY KEY(code, codeExt) );  -- \u0437\u0430\u043c\u0435\u043d\u044b \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 CREATE TABLE kladr_repl(   oldCode     varchar,   newCode     varchar,   PRIMARY KEY(oldCode, newCode) ); CREATE INDEX \"kladr-repl-new\"   ON kladr_repl(newCode); CREATE INDEX \"kladr-repl-old\"   ON kladr_repl(oldCode);  -- \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 (\"\u0443\u043b\", \"\u043f\u0435\u0440\", \"\u0433\") CREATE TABLE kladr_abbr(   code     varchar,   lvl     smallint,   name     varchar,   PRIMARY KEY(code, lvl) ); -- \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u043c\u0443 \"\u0443\u0440\u043e\u0432\u043d\u044e\" \u043e\u0431\u044a\u0435\u043a\u0442\u0430 CREATE INDEX \"kladr-abbr-lvl\"   ON kladr_abbr(lvl);<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 DBF \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f &#171;\u0434\u0438\u0444\u0444\u043e\u0432&#187;, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/post\/492464\/\">&#171;DBA: \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u044b&#187;<\/a>:<\/p>\n<details class=\"spoiler\">\n<summary>kladr-abbr<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">--\/\/ \u041a\u041b\u0410\u0414\u0420 : \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f  -- \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u041a\u041b\u0410\u0414\u0420'\u0430 CREATE TEMPORARY TABLE _kladr_abbr(   LIKE kladr_abbr INCLUDING INDEXES );  -- \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 DBF \u0434\u0430\u043d\u043d\u044b\u043c\u0438 INSERT INTO _kladr_abbr(code, lvl, name)   SELECT     \"SCNAME\",     \"KOD_T_ST\"::smallint,     \"SOCRNAME\"   FROM     \"SOCRBASE.DBF\";  -- \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 DELETE FROM   kladr_abbr T USING   kladr_abbr X LEFT JOIN   _kladr_abbr Y     USING(code, lvl) WHERE   (T.code, T.lvl) = (X.code, X.lvl) AND   Y IS NULL;  -- \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f UPDATE   kladr_abbr kl SET   name = kli.name FROM   _kladr_abbr kli WHERE   (kl.code, kl.lvl) = (kli.code, kli.lvl) AND   (     kl.name   ) IS DISTINCT FROM   (     kli.name   );  -- \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 DELETE FROM   _kladr_abbr kli USING   kladr_abbr kl WHERE   (kli.code, kli.lvl) = (kl.code, kl.lvl);  -- \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f INSERT INTO kladr_abbr   SELECT     *   FROM     _kladr_abbr;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>kladr<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">--\/\/ \u041a\u041b\u0410\u0414\u0420 : \u043e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0434\u043e \u0443\u043b\u0438\u0446  -- \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u041a\u041b\u0410\u0414\u0420'\u0430 CREATE TEMPORARY TABLE _kladr(   LIKE kladr INCLUDING INDEXES );  -- \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 DBF \u0434\u0430\u043d\u043d\u044b\u043c\u0438 INSERT INTO _kladr(code, status, name, abbr, idx, ifns, ocato, lvl)   SELECT DISTINCT ON(code, status)     *   FROM     (       SELECT         regexp_replace(rpad(substr(\"CODE\", 1, length(\"CODE\") - 2), 15, '0'), '^(.{0,}?)((((0{3})?0{3})?0{3})?0{4})?$', E'\\\\1', 'ig') code,         substr(\"CODE\", length(\"CODE\") - 1, 2) status,         \"NAME\",         \"SOCR\",         nullif(\"INDEX\", ''),         nullif(\"GNINMB\", ''),         nullif(\"OCATD\", ''),         \"STATUS\"       FROM         (           SELECT             \"CODE\",             \"NAME\",             \"SOCR\",             \"INDEX\",             \"GNINMB\",             \"OCATD\",             \"STATUS\"::smallint           FROM             \"KLADR.DBF\"         UNION ALL           SELECT             \"CODE\",             \"NAME\",             \"SOCR\",             \"INDEX\",             \"GNINMB\",             \"OCATD\",             NULL::smallint \"STATUS\"           FROM             \"STREET.DBF\"         ) T     ) T;  -- \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 DELETE FROM   kladr T USING   kladr X LEFT JOIN   _kladr Y     USING(code, status) WHERE   (T.code, T.status) = (X.code, X.status) AND   Y IS NULL;  -- \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f UPDATE   kladr kl SET   (     name,     abbr,     idx,     ifns,     ocato,     lvl   ) =   (     kli.name,     kli.abbr,     kli.idx,     kli.ifns,     kli.ocato,     kli.lvl   ) FROM   _kladr kli WHERE   (kl.code, kl.status) = (kli.code, kli.status) AND   (     kl.name,     kl.abbr,     kl.idx,     kl.ifns,     kl.ocato,     kl.lvl   ) IS DISTINCT FROM   (     kli.name,     kli.abbr,     kli.idx,     kli.ifns,     kli.ocato,     kli.lvl   );  -- \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 DELETE FROM   _kladr kli USING   kladr kl WHERE   (kli.code, kli.status) = (kl.code, kl.status);  -- \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f INSERT INTO kladr   SELECT     *   FROM     _kladr;  -- \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u043a\u044d\u0448 DELETE FROM   kladr_kw WHERE   (code, status) IN (     SELECT       (ro).code,       (ro).status     FROM       kladr$log     WHERE       ro IS DISTINCT FROM NULL   );  INSERT INTO   kladr_kw(code, status, keyword) SELECT DISTINCT   code,   status,   kw FROM   (     SELECT       (rn).code,       (rn).status,       regexp_split_to_table(lower((rn).name), E'[^\\\\-a-z\u0430-\u044f\u04510-9]+', 'i') kw     FROM       kladr$log     WHERE       rn IS DISTINCT FROM NULL   ) T WHERE   kw &lt;> '';  DELETE FROM kladr$log;<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u044f &#171;\u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u0445&#187; \u043d\u0443\u043b\u0435\u0439 \u043f\u043e \u043c\u0430\u0441\u043a\u0435 \u0434\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u043d\u0430\u043c \u0434\u043b\u0438\u043d\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c <code>76 000 010 000<\/code> \u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 4 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u043e\u043b\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>010<\/code> \u0442\u0443\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>kladr-house<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">--\/\/ \u041a\u041b\u0410\u0414\u0420 : \u0434\u043e\u043c\u0430  -- \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u041a\u041b\u0410\u0414\u0420'\u0430 CREATE TEMPORARY TABLE _kladr_house(   LIKE kladr_house INCLUDING INDEXES );  -- \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 DBF \u0434\u0430\u043d\u043d\u044b\u043c\u0438 INSERT INTO _kladr_house(code, codeExt, name, idx, ifns, ocato)   SELECT     regexp_replace(substr(\"CODE\", 1, 15), '^(.{0,}?)((((0{3})?0{3})?0{3})?0{4})?$', E'\\\\1', 'ig'),     substr(\"CODE\", 16, 4),     \"NAME\",     nullif(\"INDEX\", ''),     nullif(\"GNINMB\", ''),     nullif(\"OCATD\", '')   FROM     \"DOMA.DBF\";  -- \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 DELETE FROM   kladr_house T USING   kladr_house X LEFT JOIN   _kladr_house Y     USING(code, codeExt) WHERE   (T.code, T.codeExt) = (X.code, X.codeExt) AND   Y IS NULL;  -- \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f UPDATE   kladr_house kl SET   (     name,     idx,     ifns,     ocato   ) =   (     kli.name,     kli.idx,     kli.ifns,     kli.ocato   ) FROM   _kladr_house kli WHERE   (kl.code, kl.codeExt) = (kli.code, kli.codeExt) AND   (     kl.name,     kl.idx,     kl.ifns,     kl.ocato   ) IS DISTINCT FROM   (     kli.name,     kli.idx,     kli.ifns,     kli.ocato   );  -- \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 DELETE FROM   _kladr_house kli USING   kladr_house kl WHERE   (kli.code, kli.codeExt) = (kl.code, kl.codeExt);  -- \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f INSERT INTO kladr_house   SELECT     *   FROM     _kladr_house;  -- \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u043a\u044d\u0448 DELETE FROM   kladr_hs WHERE   (code) IN (       SELECT         (ro).code       FROM         kladr_house$log       WHERE         ro IS DISTINCT FROM NULL     UNION ALL       SELECT         (rn).code       FROM         kladr_house$log       WHERE         rn IS DISTINCT FROM NULL   );  -- \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 CREATE TEMPORARY TABLE _kladr_hs0 AS   SELECT DISTINCT ON(code, house)     code,     idx,     ifns,     ocato,     unnest(houses) house   FROM     (       SELECT         *,         CASE           WHEN _range IS NULL AND name ~ E'_' THEN ARRAY[regexp_replace(name, '_', '-')]           WHEN _range IS NULL THEN ARRAY[name]           WHEN _range IS NOT NULL THEN ARRAY(             SELECT               i::text             FROM               generate_series(_range[1]::integer + CASE WHEN _range[4] IS NOT NULL THEN (_range[1]::integer + _range[4]::integer) % 2 ELSE 0 END, _range[2]::integer, _range[3]::integer) i           )           ELSE NULL         END houses       FROM         (           SELECT             code,             idx,             ifns,             ocato,             name,             CASE               WHEN name ~ E'^\u041d\\\\(\\\\d+-\\\\d+\\\\)$' THEN regexp_split_to_array(substr(name, 3, length(name) - 3), '-') || '2'::text || '1'::text               WHEN name ~ E'^\u0427\\\\(\\\\d+-\\\\d+\\\\)$' THEN regexp_split_to_array(substr(name, 3, length(name) - 3), '-') || '2'::text || '0'::text               WHEN name = '\u041d' THEN '{1,999,2}'::text[]               WHEN name = '\u0427' THEN '{2,998,2}'::text[]               WHEN name ~ E'^\\\\d+-\\\\d+$' THEN regexp_split_to_array(name, '-') || '1'::text               ELSE NULL             END _range           FROM             (               SELECT                 code,                 idx,                 ifns,                 ocato,                 unnest(regexp_split_to_array(upper(name), ',')) \"name\"               FROM                 kladr_house               WHERE                 (code) IN (                     SELECT                       (ro).code                     FROM                       kladr_house$log                     WHERE                       ro IS DISTINCT FROM NULL                   UNION ALL                     SELECT                       (rn).code                     FROM                       kladr_house$log                     WHERE                       rn IS DISTINCT FROM NULL                 )             ) T         ) T     ) T ORDER BY   code, house, (_range IS NULL) DESC;  CREATE INDEX ON _kladr_hs0(code, house, idx DESC NULLS LAST);  CREATE TEMPORARY TABLE _kladr_hs1 AS   SELECT DISTINCT ON (code, house)     code,     idx,     ifns,     ocato,     house   FROM     _kladr_hs0   ORDER BY     code, house, idx DESC NULLS LAST;  CREATE INDEX ON _kladr_hs1(code, house);  CREATE TEMPORARY TABLE _kladr_hs2 AS   SELECT     code,     coalesce(       idx,        coalesce(         (           SELECT             idx           FROM             _kladr_hs1           WHERE             (code, house) = (T.code, regexp_replace(T.house, E'^(\\\\d+)(\\\\D)?.*$', E'\\\\1', 'ig'))           LIMIT 1         ),          coalesce(           (             SELECT               idx             FROM               kladr             WHERE               code IN (                 substr(T.code, 1, 15),                 substr(T.code, 1, 11),                 substr(T.code, 1,  8),                 substr(T.code, 1,  5),                 substr(T.code, 1,  2)               ) AND --              status = '00' AND               idx IS NOT NULL             ORDER BY               length(code) DESC             LIMIT 1           ),           ''         )       )     ) idx,     ifns,     ocato,     house   FROM     _kladr_hs1 T;  CREATE INDEX ON _kladr_hs2(code, idx, ifns, ocato, house);  INSERT INTO kladr_hs(code, idx, ifns, ocato, houses)   SELECT     code,     idx,     ifns,     ocato,     array_agg(house ORDER BY house) houses   FROM     _kladr_hs2   GROUP BY     1, 2, 3, 4;  DELETE FROM kladr_house$log;<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0432 \u0441\u043f\u0438\u0441\u043a\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0434\u043e\u043c\u043e\u0432:<\/p>\n<ul>\n<li>\n<p><code>5-11    -> {5, 6, 7, 8, 9, 10, 11}<\/code><\/p>\n<\/li>\n<li>\n<p><code>\u041d(5-11) -> {5, 7, 9, 11}<\/code><\/p>\n<\/li>\n<li>\n<p><code>\u0427(6-10) -> {6, 8, 10}<\/code><\/p>\n<\/li>\n<li>\n<p><code>\u041d       -> {1, 3, ..., 999}<\/code><\/p>\n<\/li>\n<li>\n<p><code>\u0427       -> {2, 4, ..., 998}<\/code><\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>kladr-repl<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">--\/\/ \u041a\u041b\u0410\u0414\u0420 : \u0437\u0430\u043c\u0435\u043d\u044b  -- \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u041a\u041b\u0410\u0414\u0420'\u0430 CREATE TEMPORARY TABLE _kladr_repl(   LIKE kladr_repl INCLUDING INDEXES );  -- \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 DBF \u0434\u0430\u043d\u043d\u044b\u043c\u0438 INSERT INTO _kladr_repl(oldCode, newCode)   SELECT DISTINCT     co,     cn   FROM     (       SELECT         regexp_replace(rpad(co, 15, '0'), '^(.{0,}?)((((0{3})?0{3})?0{3})?0{4})?$', E'\\\\1', 'ig') co,         so,         regexp_replace(rpad(cn, 15, '0'), '^(.{0,}?)((((0{3})?0{3})?0{3})?0{4})?$', E'\\\\1', 'ig') cn,         sn       FROM         (           SELECT             *,             substr(\"OLDCODE\", 1, length(\"OLDCODE\") - 2) co,             substr(\"OLDCODE\", length(\"OLDCODE\") - 1, 2) so,             substr(\"NEWCODE\", 1, length(\"NEWCODE\") - 2) cn,             substr(\"NEWCODE\", length(\"NEWCODE\") - 1, 2) sn           FROM             \"ALTNAMES.DBF\"         ) T     ) T;  -- \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 DELETE FROM   kladr_repl T USING   kladr_repl X LEFT JOIN   _kladr_repl Y     USING(oldCode, newCode) WHERE   (T.oldCode, T.newCode) = (X.oldCode, X.newCode) AND   Y IS NULL;  -- \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 DELETE FROM   _kladr_repl kli USING   kladr_repl kl WHERE   (kli.oldCode, kli.newCode) = (kl.oldCode, kl.newCode);  -- \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f INSERT INTO kladr_repl   SELECT     *   FROM     _kladr_repl;<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0435\u0449\u0435 \u0434\u0432\u0435 &#171;\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435&#187; \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 &#8212; <code>kladr_kw<\/code> \u0438 <code>kladr_hs<\/code>:<\/p>\n<pre><code class=\"sql\">-- \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 CREATE TABLE kladr_kw(   code     varchar,   status     varchar,   keyword     varchar ); CREATE INDEX \"kladr-kw-cd\"   ON kladr_kw(code, status); CREATE INDEX \"kladr-kw-kwcd\"   ON kladr_kw(keyword varchar_pattern_ops, code varchar_pattern_ops); CREATE INDEX \"kladr-kw-cdkw\"   ON kladr_kw(code varchar_pattern_ops, keyword varchar_pattern_ops);  -- \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0434\u043e\u043c\u043e\u0432 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438 CREATE TABLE kladr_hs(   code     varchar,   idx     varchar,   ifns     varchar,   ocato     varchar,   houses     varchar[] ); CREATE INDEX \"kladr-hs-code\"   ON kladr_hs(code); CREATE INDEX \"kladr-hs-idx\"   ON kladr_hs(idx);  -- \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \"\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435\" \u0438\u043d\u0434\u0435\u043a\u0441\u044b DO $$ DECLARE   ln integer[] = '{2,5,8,11,15}'::integer[]; BEGIN   FOR i IN 1..array_length(ln, 1) LOOP     EXECUTE ' CREATE INDEX \"kladr-' || lpad(ln[i]::text, 2, '0') || '\"   ON kladr(code varchar_pattern_ops, status) WHERE   length(code) = ' || ln[i] || '; CREATE INDEX \"kladr-kw-' || lpad(ln[i]::text, 2, '0') || '\"   ON kladr_kw(keyword varchar_pattern_ops) WHERE   length(code) = ' || ln[i] || '; CREATE INDEX \"kladr-kw-kwcd-' || lpad(ln[i]::text, 2, '0') || '\"   ON kladr_kw(keyword varchar_pattern_ops, code varchar_pattern_ops) WHERE   length(code) = ' || ln[i] || ';     ';   END LOOP; END$$ LANGUAGE plpgsql;<\/code><\/pre>\n<p>\u0417\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0438 \u043a\u0430\u043a \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/575704\/\">\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438<\/a>, \u0430 \u044d\u0442\u0443 \u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>normalize.sql<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">CREATE OR REPLACE FUNCTION normalize(obj kladr) RETURNS text AS $$   SELECT     CASE       -- \u0440\u0435\u0433\u0438\u043e\u043d\u044b       WHEN length(code) = 2 THEN         regexp_replace(           regexp_replace(             (               CASE                 WHEN abbr = '\u0420\u0435\u0441\u043f' AND name !~* '(\u0430\u044f)$' THEN                   abbrfull || ' ' || name                 WHEN abbr = '\u043a\u0440\u0430\u0439' THEN                   name || ' ' || abbr                 WHEN abbr = '\u043e\u0431\u043b' THEN                   name || ' ' || abbr || '.'                 WHEN abbr = '\u0433' THEN                   abbr || '.' || name                 WHEN abbr IN ('\u0410\u041e', '\u0410\u043e\u0431\u043b') THEN                   regexp_replace(name, ' \u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u043e\u043a\u0440\u0443\u0433', '', 'ig') || ' \u0410\u041e'                 ELSE                   name || ' ' || abbrfull               END             ),             E'\/([\u0430-\u044f]+)\/',             E'- \\\\1',             'ig'           ),           E'^(.{0,}?) - ([\u0430-\u044f]+)(.{0,}?)$',           E'\\\\1\\\\3 (\\\\2)',           'ig'         )       -- \u0440\u0430\u0439\u043e\u043d\u044b       WHEN length(code) = 5 THEN         CASE           -- (14xxx) \u0443\u043b\u0443\u0441           WHEN abbr = '\u0443' THEN             initcap(name) || ' ' || lower(abbrfull)           -- (24048)           WHEN abbr = '\u0410\u041e' THEN             initcap(name) || ' ' || abbr           ELSE             initcap(name) || ' ' || abbr || (CASE WHEN abbr ~ '(-|\/)' THEN '' ELSE '.' END)         END       -- \u0433\u043e\u0440\u043e\u0434\u0430 \u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b       WHEN length(code) IN (8, 11) THEN         CASE           WHEN abbr IN ('\u0442\u0435\u0440', '\u0433', '\u0441\/\u043f', '\u0434\u043f') THEN             regexp_replace(               regexp_replace(                 CASE                   WHEN name ~* E'^\u0414\u041d\u041f ' THEN                     regexp_replace(name, E'^\u0414\u041d\u041f ', '\u0434\u043d\u043f ', 'ig')                   WHEN name ~* E'^\u0414\u041d\u0422 ' THEN                     regexp_replace(name, E'^\u0414\u041d\u0422 ', '\u0434\u043d\u0442 ', 'ig')                   WHEN name ~* E'^\u0414\u0421\u041a ' THEN                     regexp_replace(name, E'^\u0414\u0421\u041a ', '\u0434\u0441\u043a ', 'ig')                   WHEN name ~* E'^\u0414\u0421\u041f\u041a ' THEN                     regexp_replace(name, E'^\u0414\u0421\u041f\u041a ', '\u0434\u0441\u043f\u043a ', 'ig')                   WHEN name ~* E'^\u0414\u041f\u041a ' THEN                     regexp_replace(name, E'^\u0414\u041f\u041a ', '\u0434\u043f\u043a ', 'ig')                   WHEN name ~* E'^\u041d\u0421\u0422 ' THEN                     regexp_replace(name, E'^\u041d\u0421\u0422 ', '\u043d\u0441\u0442 ', 'ig')                   WHEN name ~* E'^\u0421\u0414\u0422 ' THEN                     regexp_replace(name, E'^\u0421\u0414\u0422 ', '\u0441\u0434\u0442 ', 'ig')                   WHEN name ~* E'^\u0421\u041a ' THEN                     regexp_replace(name, E'^\u0421\u041a ', '\u0441\u043a ', 'ig')                   WHEN name ~* E'^\u0421\/\u041a ' THEN                     regexp_replace(name, E'^\u0421\/\u041a ', '\u0441\u043a ', 'ig')                   WHEN name ~* E'^\u0421\u041a\u0422 ' THEN                     regexp_replace(name, E'^\u0421\u041a\u0422 ', '\u0441\u043a\u0442 ', 'ig')                   WHEN name ~* E'^\u0421\u0422 ' THEN                     regexp_replace(name, E'^\u0421\u0422 ', '\u0441\u0442 ', 'ig')                   WHEN name ~* E'^\u0421\/\u0422 ' THEN                     regexp_replace(name, E'^\u0421\/\u0422 ', '\u0441\u0442 ', 'ig')                   WHEN name ~* E'^\u0421\u041d\u0422 ' THEN                     regexp_replace(name, E'^\u0421\u041d\u0422 ', '\u0441\u043d\u0442 ', 'ig')                   WHEN name ~* E'^\u041f\u041a\u0421 ' THEN                     regexp_replace(name, E'^\u041f\u041a\u0421 ', '\u043f\u043a\u0441 ', 'ig')                   WHEN name ~* E'^\u041f\u041a\u0421\u0422 ' THEN                     regexp_replace(name, E'^\u041f\u041a\u0421\u0422 ', '\u043f\u043a\u0441\u0442 ', 'ig')                   WHEN name ~* E'^\u041f\u041e\u0421 ' THEN                     regexp_replace(name, E'^\u041f\u041e\u0421 ', '\u043f\u043e\u0441 ', 'ig')                   WHEN name ~* E'^\u043c\u0430\u0441\u0441\u0438\u0432 ' THEN                     regexp_replace(name, E'^\u043c\u0430\u0441\u0441\u0438\u0432 ', '\u043c\u0430\u0441\u0441\u0438\u0432 ', 'ig')                   WHEN name ~* E' \u0421\u041d\u0422$' THEN                     regexp_replace(name, E'^(.*) \u0421\u041d\u0422$', E'\u0441\u043d\u0442 \\\\1', 'ig')                   WHEN name ~* E' \u0421\u0422$' THEN                     regexp_replace(name, E'^(.*) \u0421\u0422$', E'\u0441\u0442 \\\\1', 'ig')                   WHEN name ~* E' \u0414\u041d\u0422$' THEN                     regexp_replace(name, E'^(.*) \u0414\u041d\u0422$', E'\u0434\u043d\u0442 \\\\1', 'ig')                   WHEN name ~* E' \u0414\u041f\u041a$' THEN                     regexp_replace(name, E'^(.*) \u0414\u041f\u041a$', E'\u0434\u043f\u043a \\\\1', 'ig')                   WHEN name ~* E'^\u0443\u0447-\u043a \u0421\u0414\u0422 ' THEN                     regexp_replace(name, E'^\u0443\u0447-\u043a \u0421\u0414\u0422 ', '\u0441\u0434\u0442 ', 'ig')                   WHEN name ~* E'^\u0443\u0447-\u043a ' THEN                     regexp_replace(name, E'^\u0443\u0447-\u043a ', '', 'ig')                   WHEN name ~* E'^\u0421\u041f\u041a ' THEN                     regexp_replace(name, E'^\u0421\u041f\u041a ', '\u0441\u043f\u043a ', 'ig')                   WHEN name ~* E'^\u0441\u043e\u0442 ' THEN                     regexp_replace(name, E'^\u0441\u043e\u0442 ', '\u0441\u043e\u0442 ', 'ig')                   WHEN name ~* E'^\u0443\u0440\u043e\u0447\u0438\u0449\u0435 ' THEN                     regexp_replace(name, E'^\u0443\u0440\u043e\u0447\u0438\u0449\u0435 ', '\u0443\u0440\u043e\u0447\u0438\u0449\u0435 ', 'ig')                   WHEN name ~* E'^\u041a\u0421 ' THEN                     regexp_replace(name, E'^\u041a\u0421 ', '\u043a\u0441 ', 'ig')                   WHEN name ~* E'^\u041c\u041e \u043f\u0433\u0442.' THEN                     regexp_replace(name, E'^\u041c\u041e \u043f\u0433\u0442.', '\u043f\u0433\u0442 ', 'ig')                   WHEN name ~* E'^\u041c\u041e \u0433\u043e\u0440\u043e\u0434 ' THEN                     regexp_replace(name, E'^\u041c\u041e \u0433\u043e\u0440\u043e\u0434 ', '\u0433.', 'ig')                   WHEN name ~* E'^\u041c\u041e \u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435 ' THEN                     regexp_replace(name, E'^\u041c\u041e \u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435 ', '\u0433\/\u043f ', 'ig')                   WHEN name ~* E'^\u041c\u041e \u043f\u043e\u0441\u0435\u043b\u043e\u043a ' THEN                     regexp_replace(name, E'^\u041c\u041e \u043f\u043e\u0441\u0435\u043b\u043e\u043a ', '\u043f\u043e\u0441.', 'ig')                   WHEN name ~* E'^\u041c\u041e \u0421\u041f ' THEN                     regexp_replace(name, E'^\u041c\u041e \u0421\u041f (.*)', E'\u0441\/\u043f \\\\1', 'ig')                   WHEN name ~* E'^\u041c\u041e \u0413\u041f \u043f\u043e\u0441\u0435\u043b\u043e\u043a ' THEN                     regexp_replace(name, E'^\u041c\u041e \u0413\u041f \u043f\u043e\u0441\u0435\u043b\u043e\u043a (.*)', E'\u043f\u0433\u0442 \\\\1', 'ig')                   WHEN name ~* E'^\u041c\u041e \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435 ' THEN                     regexp_replace(name, E'^\u041c\u041e \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435 (.*)', E'\u0441\/\u043f \\\\1', 'ig')                   WHEN name ~* E'^\u041c\u041e \u0441\u0435\u043b\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435 ' THEN                     regexp_replace(name, E'^\u041c\u041e \u0441\u0435\u043b\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435 (.*)', E'\u0441\/\u043f \\\\1', 'ig')                   WHEN name ~* E'^\u041c\u041e (.*) \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435$' THEN                     regexp_replace(name, E'^\u041c\u041e (.*) \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435$', E'\u0441\/\u043f \\\\1', 'ig')                   WHEN name ~* ' \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435$' THEN                     regexp_replace(name, '^(.*) \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435$', E'\u0441\/\u043f \\\\1', 'ig')                   WHEN name ~* ' \u0441\u0435\u043b\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435$' THEN                     regexp_replace(name, '^(.*) \u0441\u0435\u043b\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435$', E'\u0441\/\u043f \\\\1', 'ig')                   WHEN name ~* ' \u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435$' THEN                     regexp_replace(name, '^(.*) \u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435$', E'\u0433\/\u043f \\\\1', 'ig')                   WHEN name ~* ' \u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0439 \u043e\u043a\u0440\u0443\u0433$' THEN                     regexp_replace(name, '^(.*) \u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0439 \u043e\u043a\u0440\u0443\u0433$', E'\\\\1 \u0433\/\u043e', 'ig')                   WHEN name ~* '^\u0413\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435 ' THEN                     regexp_replace(name, '^\u0413\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435 ', E'\u0433\/\u043f ', 'ig')                   ELSE                     CASE                       WHEN abbr IN ('\u0441\/\u043f', '\u0434\u043f') THEN abbr || ' ' || name                       ELSE abbr || '.' || name                     END                 END,                 E'^(\u0433\/\u043f|\u0441\/\u043f) (.*(?:\u043e\u0435))$',                 E'\\\\2 \\\\1',                 'ig'               ),               E'(\\\\S)\\\\(',               E'\\\\1 (',               'ig'             )           WHEN abbr IN ('\u0432\u044b\u0441\u0435\u043b') THEN             CASE               WHEN name ~ E'(.*((?:\u0438\u0435)))$' THEN                 name || ' \u0432\u044b\u0441\u0435\u043b\u043a\u0438'               ELSE                 '\u0432\u044b\u0441\u0435\u043b\u043e\u043a ' || name             END           WHEN abbr IN ('\u0433\u043e\u0440\u043e\u0434\u043e\u043a') THEN             CASE               WHEN name ~* E'(^\u0433\u043e\u0440\u043e\u0434\u043e\u043a|\u0433\u043e\u0440\u043e\u0434\u043e\u043a$)' THEN                 name               WHEN name ~* E'\u0432\u043e\u0435\u043d\u043d\u044b\u0439' THEN                 regexp_replace(name, E'(\u0432\u043e\u0435\u043d\u043d\u044b\u0439)(\\\\s?)', E'\\\\1 \u0433\u043e\u0440\u043e\u0434\u043e\u043a\\\\2', 'ig')               ELSE                 abbr || ' ' || name             END           WHEN abbr IN ('\u0441\/\u0430', '\u0441\/\u043c\u043e') THEN             regexp_replace(abbr || ' ' || name, E'^(' || abbr || ') (.*((?:\u0430\u044f)|(?:\u043e\u0435)|(?:\u0438\u0439)|(?:\u044b\u0439)))$', E'\\\\2 \\\\1', 'ig')           WHEN abbr IN ('\u043f\/\u043e', '\u043f\u0433\u0442', '\u043c\u0430\u0441\u0441\u0438\u0432') THEN abbr || ' ' || name           WHEN abbr = '\u0441\/\u0441' THEN (             CASE               WHEN name ~* E'^\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0441\u0435\u043b\u043e\u043a' THEN regexp_replace(name, E'^\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0441\u0435\u043b\u043e\u043a', '\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0441\u0435\u043b\u043e\u043a', 'ig')               WHEN name ~* E'^\u0440\\\\.\u043f\\\\.' THEN regexp_replace(name, E'^\u0440\\\\.\u043f\\\\.', '\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0441\u0435\u043b\u043e\u043a', 'ig')               ELSE name || ' ' || abbr             END           )           WHEN abbr = '\u0436\/\u0434_\u0431\u0443\u0434\u043a\u0430' THEN             '\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430 ' || regexp_replace(name, E'(\u0431\u0443\u0434\u043a\u0430|\u0431\u0443\u0434\u043a\u0430 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438|\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u0431\u0443\u0434\u043a\u0430)\\\\s*', E'', 'ig')           WHEN abbr = '\u0436\/\u0434_\u043a\u0430\u0437\u0430\u0440\u043c' THEN             '\u0436\/\u0434 \u043a\u0430\u0437\u0430\u0440\u043c\u0430 ' || regexp_replace(name, E'(\u043a\u0430\u0437\u0430\u0440\u043c\u0430)\\\\s*', E'', 'ig')           WHEN abbr = '\u0436\/\u0434_\u043e\u043f' THEN             '\u0436\/\u0434 \u043e\/\u043f ' || name           WHEN abbr = '\u0436\/\u0434_\u043f\u043b\u0430\u0442\u0444' THEN             '\u0436\/\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 ' || regexp_replace(name, E'(\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430|\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438|\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430)\\\\s*', E'', 'ig')           WHEN abbr = '\u0436\/\u0434_\u043f\u043e\u0441\u0442' THEN             CASE               WHEN name ~* E'^\u0411\u043b\u043e\u043a\u043f\u043e\u0441\u0442' THEN                 name               WHEN name ~* E'^(\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f )?\u0431\u0443\u0434\u043a\u0430' THEN                 regexp_replace(name, E'^(\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f )?\u0431\u0443\u0434\u043a\u0430', E'\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430', 'ig')               WHEN name ~* E'^\u0440\u0430\u0437\u044a\u0435\u0437\u0434 ' THEN                 regexp_replace(name, E'^\u0440\u0430\u0437\u044a\u0435\u0437\u0434', E'\u0436\/\u0434 \u0440\u0430\u0437\u044a\u0435\u0437\u0434', 'ig')               ELSE                 '\u0436\/\u0434 \u043f\u043e\u0441\u0442 ' || name             END           WHEN abbr = '\u0436\/\u0434_\u0440\u0437\u0434' THEN             '\u0436\/\u0434 \u0440\u0430\u0437\u044a\u0435\u0437\u0434 ' || name           WHEN abbr = '\u0436\/\u0434_\u0441\u0442' THEN             '\u0436\/\u0434 \u0441\u0442\u0430\u043d\u0446\u0438\u044f ' || name           WHEN abbr = '\u043a\u0430\u0437\u0430\u0440\u043c\u0430' THEN             CASE               WHEN name ~* E'^\u0411\u043b\u043e\u043a\u043f\u043e\u0441\u0442' THEN                 name               WHEN name ~* E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f\\\\s+' THEN                 regexp_replace(name, E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f\\\\s+', E'\u0436\/\u0434 \u043a\u0430\u0437\u0430\u0440\u043c\u0430 ', 'ig')               ELSE                 '\u043a\u0430\u0437\u0430\u0440\u043c\u0430 ' || regexp_replace(name, E'^\u043a\u0430\u0437\u0430\u0440\u043c\u0430\\\\s*', E'', 'ig')             END           WHEN abbr = '\u043c\u043a\u0440' THEN             CASE               WHEN name ~* E'^(.*-\u0439|\\\\d+)$' THEN                 name || ' ' || lower(abbrfull)               WHEN name ~* E'^(\\\\d+[\u0430-\u044f])$' THEN                 lower(abbrfull) || ' ' || name               ELSE                 abbr || '.' || name             END           WHEN abbr IN ('\u043d\u043f','\u0441','\u0434','\u0442\u0435\u0440','\u043f','\u0436\u0438\u043b\u0437\u043e\u043d\u0430','\u0436\u0438\u043b\u0440\u0430\u0439\u043e\u043d','\u043a\u0432-\u043b','\u0445','\u0441\u0442-\u0446\u0430','\u0440\u043f','\u0440\u0437\u0434','\u043c','\u0441\u0442','\u0443','\u0441\u043d\u0442','\u0441\u043b') THEN             CASE               WHEN name ~* E'^\u043e\u0441\u0442\u0440\u043e\u0432\\\\s+' THEN                 regexp_replace(name, E'^\u043e\u0441\u0442\u0440\u043e\u0432', E'\u043e\u0441\u0442\u0440\u043e\u0432', 'ig')               WHEN name ~* E'^\u043a\u0430\u0437\u0430\u0440\u043c\u0430\\\\s+' THEN                 regexp_replace(name, E'^\u043a\u0430\u0437\u0430\u0440\u043c\u0430', E'\u043a\u0430\u0437\u0430\u0440\u043c\u0430', 'ig')               WHEN name ~* E'^\u043a\u043e\u0440\u0434\u043e\u043d\\\\s+' THEN                 regexp_replace(name, E'^\u043a\u043e\u0440\u0434\u043e\u043d', E'\u043a\u043e\u0440\u0434\u043e\u043d', 'ig')               WHEN name ~* E'^\u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d ' THEN                 regexp_replace(name, E'^\u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d ', '\u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d ', 'ig')               WHEN name ~* E' \u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d$' THEN                 regexp_replace(name, E'^(.*) \u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d$', E'\u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d \\\\1', 'ig')               WHEN name ~* E'^\u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430 ' THEN                 regexp_replace(name, E'^\u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430 ', '\u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430 ', 'ig')               WHEN name ~* E' \u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430$' THEN                 regexp_replace(name, E'^(.*) \u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430$', E'\u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430 \\\\1', 'ig')               WHEN name ~* E'^\u0434\/\u043e ' THEN                 regexp_replace(name, E'^\u0434\/\u043e ', '\u0434\/\u043e ', 'ig')               WHEN name ~* E'^\u043f\/\u043e ' THEN                 regexp_replace(name, E'^\u043f\/\u043e ', '\u043f\/\u043e ', 'ig')               WHEN name ~* E'^\u043f\/\u043b ' THEN                 regexp_replace(name, E'^\u043f\/\u043b ', '\u043f\/\u043b ', 'ig')               WHEN name ~* E'^\u0442\/\u0431 ' THEN                 regexp_replace(name, E'^\u0442\/\u0431 ', '\u0442\/\u0431 ', 'ig')               WHEN name ~* E'^\u0421\u041d\u0422 ' THEN                 regexp_replace(name, E'^\u0421\u041d\u0422 ', '\u0441\u043d\u0442 ', 'ig')               WHEN name ~* E' \u0421\u041d\u0422$' THEN                 regexp_replace(name, E'^(.*) \u0421\u041d\u0422$', E'\u0441\u043d\u0442 \\\\1', 'ig')               WHEN name ~* E'^\u0421\u0414\u0422 ' THEN                 regexp_replace(name, E'^\u0421\u0414\u0422 ', '\u0441\u0434\u0442 ', 'ig')               WHEN name ~* E' \u0421\u0414\u0422$' THEN                 regexp_replace(name, E'^(.*) \u0421\u0414\u0422$', E'\u0441\u0434\u0442 \\\\1', 'ig')               WHEN name ~* E'^\u0421\u0422 ' THEN                 regexp_replace(name, E'^\u0421\u0422 ', '\u0441\u0442 ', 'ig')               WHEN name ~* E' \u0421\u0422$' THEN                 regexp_replace(name, E'^(.*) \u0421\u0422$', E'\u0441\u0442 \\\\1', 'ig')               WHEN name ~* E'^\u0414\u041d\u0422 ' THEN                 regexp_replace(name, E'^\u0414\u041d\u0422 ', '\u0434\u043d\u0442 ', 'ig')               WHEN name ~* E' \u0414\u041d\u0422$' THEN                 regexp_replace(name, E'^(.*) \u0414\u041d\u0422$', E'\u0434\u043d\u0442 \\\\1', 'ig')               WHEN name ~* E'^\u0414\u041d\u041f ' THEN                 regexp_replace(name, E'^\u0414\u041d\u041f ', '\u0434\u043d\u043f ', 'ig')               WHEN name ~* E' \u0414\u041d\u041f$' THEN                 regexp_replace(name, E'^(.*) \u0414\u041d\u041f$', E'\u0434\u043d\u043f \\\\1', 'ig')               WHEN name ~* E'^\u0431\u0443\u0434\u043a\u0430( (\u0436\/\u0434|\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438))?' THEN                 regexp_replace(name, E'^\u0431\u0443\u0434\u043a\u0430( (\u0436\/\u0434|\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438))?', E'\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430', 'ig')               WHEN name ~* E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u0431\u0443\u0434\u043a\u0430' THEN                 regexp_replace(name, E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u0431\u0443\u0434\u043a\u0430', E'\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430', 'ig')               WHEN name ~* E'^\u043f\u043b\u0430\u0442\u0444.+' THEN                 regexp_replace(name, E'^(\u043f\u043b\u0430\u0442\u0444)\\\\s+', E'\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 ', 'ig')               WHEN name ~* E'^\u043f\u043e\u0441\u0435\u043b\u043e\u043a.+' THEN                 regexp_replace(name, E'^(\u043f\u043e\u0441\u0435\u043b\u043e\u043a)\\\\s+', E'\u043f.', 'ig')               WHEN name ~* E'^(\u0440\u0437\u0434|\u0440\u0430\u0437\u044a\u0435\u0437\u0434).+' THEN                 regexp_replace(name, E'^(\u0440\u0437\u0434|\u0440\u0430\u0437\u044a\u0435\u0437\u0434)\\\\s+', E'\u0440\u0430\u0437\u044a\u0435\u0437\u0434 ', 'ig')               WHEN name ~* E'^\u0443\u0447\u0430\u0441\u0442\u043e\u043a.+' THEN                 regexp_replace(name, E'^(\u0443\u0447\u0430\u0441\u0442\u043e\u043a)\\\\s+', E'\u0443\u0447\u0430\u0441\u0442\u043e\u043a ', 'ig')               WHEN name ~* E'^(\u0443\u0440\u043e\u0447\u0438\u0449\u0435|\u0443\u0440-\u0449\u0435) ' THEN                 regexp_replace(name, E'^(\u0443\u0440\u043e\u0447\u0438\u0449\u0435|\u0443\u0440-\u0449\u0435) ', '\u0443\u0440\u043e\u0447\u0438\u0449\u0435 ', 'ig') --              WHEN name ~* E'^\u0436\/\u0434' THEN --                name               ELSE                 CASE                   WHEN abbr IN ('\u0441', '\u0434', '\u0442\u0435\u0440', '\u043f') THEN                     abbr || '.' || name                   WHEN abbr IN ('\u0436\u0438\u043b\u0437\u043e\u043d\u0430','\u0436\u0438\u043b\u0440\u0430\u0439\u043e\u043d','\u043a\u0432-\u043b','\u0445','\u0441\u0442-\u0446\u0430','\u0440\u043f','\u0440\u0437\u0434','\u043c','\u0441\u0442','\u0443') THEN                     lower(abbrfull) || ' ' || name                   WHEN abbr IN ('\u0441\u043d\u0442') THEN                     abbr || ' ' || name                   WHEN abbr IN ('\u0441\u043b') THEN                     regexp_replace(lower(abbrfull) || ' ' || name, E'^(' || lower(abbrfull) || ') (.*((?:\u0430\u044f)))$', E'\\\\2 \\\\1', 'ig')                   WHEN abbr IN ('\u043d\u043f') THEN                     '\u043d\/\u043f ' || name                   ELSE                     name                 END             END           ELSE             CASE               WHEN length(code) = 8 THEN                 name || ' ' || abbr               ELSE                 abbr || ' ' || name             END         END       -- \u0443\u043b\u0438\u0446\u044b       WHEN length(code) = 15 THEN         CASE           WHEN abbr IN ('\u0432\u044b\u0441\u0435\u043b') THEN             CASE               WHEN name ~ E'(.*((?:\u0438\u0435)))$' THEN                 name || ' \u0432\u044b\u0441\u0435\u043b\u043a\u0438'               ELSE                 '\u0432\u044b\u0441\u0435\u043b\u043e\u043a ' || name             END           WHEN abbr IN ('\u0433\u0441\u043a') THEN             CASE               WHEN name ~* E'^\u0413\u0421\u041a ' THEN                 regexp_replace(name, E'^\u0413\u0421\u041a ', '\u0433\u0441\u043a ', 'ig')               WHEN name ~* E'^\u0413 \u0421\u041a ' THEN                 regexp_replace(name, E'^\u0413 \u0421\u041a ', '\u0433\u0441\u043a ', 'ig')               ELSE                 lower(abbr) || ' ' || name             END           WHEN abbr IN ('\u0436\/\u0434_\u0431\u0443\u0434\u043a\u0430') THEN             CASE               WHEN name ~* E'^((\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f )?\u0431\u0443\u0434\u043a\u0430|\u0436\u0434\u0431|\u0436-\u0434 \u0431\u0443\u0434\u043a\u0430)' THEN                 regexp_replace(name, E'^((\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f )?\u0431\u0443\u0434\u043a\u0430|\u0436\u0434\u0431|\u0436-\u0434 \u0431\u0443\u0434\u043a\u0430)', E'\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430', 'ig')               WHEN name ~* E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f\\\\s+' THEN                 regexp_replace(name, E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f', E'\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430', 'ig')               WHEN name ~* E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f$' THEN                 regexp_replace(name, E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f$', E'\u0416\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u0431\u0443\u0434\u043a\u0430', 'ig')               ELSE                 '\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430 ' || name             END           WHEN abbr IN ('\u0436\/\u0434_\u043a\u0430\u0437\u0430\u0440\u043c') THEN             CASE               WHEN name ~* E'^\u043a\u0430\u0437\u0430\u0440\u043c\u0430\\\\s+' THEN                 regexp_replace(name, E'^\u043a\u0430\u0437\u0430\u0440\u043c\u0430', E'\u0436\/\u0434 \u043a\u0430\u0437\u0430\u0440\u043c\u0430', 'ig')               ELSE                 '\u0436\/\u0434 \u043a\u0430\u0437\u0430\u0440\u043c\u0430 ' || name             END           WHEN abbr IN ('\u0436\/\u0434_\u043e\u043f') THEN             '\u0436\/\u0434 \u043e\/\u043f ' || name           WHEN abbr = '\u0436\/\u0434_\u043f\u043b\u0430\u0442\u0444' THEN             '\u0436\/\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 ' || regexp_replace(name, E'(\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430|\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438|\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430)\\\\s*', E'', 'ig')           WHEN abbr IN ('\u0430\u0430\u043b','\u0430\u0443\u043b') THEN             lower(abbrfull) || ' ' || name           WHEN abbr = '\u0436\/\u0434_\u043f\u043e\u0441\u0442' THEN             CASE               WHEN name ~* E'^\u0411\u043b\u043e\u043a\u043f\u043e\u0441\u0442' THEN                 name               WHEN name ~* E'^(\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f )?\u0431\u0443\u0434\u043a\u0430' THEN                 regexp_replace(name, E'^(\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f )?\u0431\u0443\u0434\u043a\u0430', E'\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430', 'ig')               WHEN name ~* E'^\u0440\u0430\u0437\u044a\u0435\u0437\u0434 ' THEN                 regexp_replace(name, E'^\u0440\u0430\u0437\u044a\u0435\u0437\u0434', E'\u0436\/\u0434 \u0440\u0430\u0437\u044a\u0435\u0437\u0434', 'ig')               ELSE                 '\u0436\/\u0434 \u043f\u043e\u0441\u0442 ' || name             END           WHEN abbr = '\u0436\/\u0434_\u0440\u0437\u0434' THEN             '\u0436\/\u0434 \u0440\u0430\u0437\u044a\u0435\u0437\u0434 ' || name           WHEN abbr = '\u0436\/\u0434_\u0441\u0442' THEN             '\u0436\/\u0434 \u0441\u0442\u0430\u043d\u0446\u0438\u044f ' || name           WHEN abbr = '\u0436\u0442' THEN             CASE               WHEN name ~* '^\u0436\u0438\u0432\u043e\u0442\u043d\u043e\u0432\u043e\u0434\u0447\u0435\u0441\u043a\u0430\u044f' THEN                 name               WHEN name ~* E'^\u0442\u043e\u0447\u043a\u0430\\\\s' THEN                 lower(abbrfull) || ' ' || regexp_replace(name, E'^\u0442\u043e\u0447\u043a\u0430 ', E'', 'ig')                WHEN name ~* E'^\u0444\u0435\u0440\u043c\u0430 ' THEN                  regexp_replace(name, E'^\u0444\u0435\u0440\u043c\u0430 ', '\u0444\u0435\u0440\u043c\u0430 ', 'ig')                WHEN name ~* E' \u0444\u0435\u0440\u043c\u0430$' THEN                  regexp_replace(name, E'^(.*) \u0444\u0435\u0440\u043c\u0430$', E'\u0444\u0435\u0440\u043c\u0430 \\\\1', 'ig')               ELSE                 regexp_replace(lower(abbrfull) || ' ' || name, E'^(' || lower(abbrfull) || ') (.*((?:\u0430\u044f)|(?:-\u044f)))$', E'\\\\2 \\\\1', 'ig')             END           WHEN abbr = '\u0437\u043e\u043d\u0430' THEN             regexp_replace(               CASE                  WHEN name ~* E'^\u0437\u043e\u043d\u0430 ' THEN                    regexp_replace(name, E'^\u0437\u043e\u043d\u0430 ', '\u0437\u043e\u043d\u0430 ', 'ig')                  WHEN name ~* E' \u0437\u043e\u043d\u0430$' THEN                    name                  WHEN name ~* E'^\u043f\u0440\u043e\u043c\u0437\u043e\u043d\u0430$' THEN                    name                  WHEN name ~* E' \u043f\u0440\u043e\u043c\u0437\u043e\u043d\u0430$' THEN                    name                 ELSE                   regexp_replace(lower(abbrfull) || ' ' || name, E'^(' || lower(abbrfull) || ') (.*((?:\u0430\u044f)|(?:-\u044f)))$', E'\\\\2 \\\\1', 'ig')               END,               E' \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u043e\u043d\u0430$',               E' \u043f\u0440\u043e\u043c\u0437\u043e\u043d\u0430',               'ig'             )           WHEN abbr = '\u043a\u0430\u0437\u0430\u0440\u043c\u0430' THEN             CASE               WHEN name ~* E'^\u0411\u043b\u043e\u043a\u043f\u043e\u0441\u0442' THEN                 name               WHEN name ~* E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f\\\\s+' THEN                 regexp_replace(name, E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f\\\\s+', E'\u0436\/\u0434 \u043a\u0430\u0437\u0430\u0440\u043c\u0430 ', 'ig')               ELSE                 '\u043a\u0430\u0437\u0430\u0440\u043c\u0430 ' || regexp_replace(name, E'^\u043a\u0430\u0437\u0430\u0440\u043c\u0430\\\\s*', E'', 'ig')             END           WHEN abbr = '\u043a\u043c' THEN             CASE               WHEN name ~* E'(\\\\d|-\u0439)$' THEN                 name || ' ' || abbr               WHEN name ~* E'^([0-9\\\\.]+)( )?' THEN                 regexp_replace(name, E'^([0-9\\\\.]+)( )?(\u043a\u043c( |$))?', E'\\\\1 \u043a\u043c ', 'ig')               ELSE                 name             END           WHEN abbr = '\u043c\u043a\u0440' THEN             CASE               WHEN name ~* E'^(.*-\u0439|\\\\d+)$' THEN                 name || ' ' || lower(abbrfull)               WHEN name ~* E'^(\\\\d+[\u0430-\u044f])$' THEN                 lower(abbrfull) || ' ' || name               ELSE                 abbr || '.' || name             END           WHEN abbr = '\u043e\u0441\u0442\u0440\u043e\u0432' THEN             CASE               WHEN name ~* E'(.*-\u0439$|\\\\d+)$' THEN                 name || ' ' || lower(abbrfull)               ELSE                 lower(abbrfull) || ' ' || name             END           WHEN abbr IN ('\u043b\u043f\u0445','\u043f\/\u043e','\u043f\/\u0440','\u043f\/\u0441\u0442','\u043f\u0440\u043e\u043c\u0437\u043e\u043d\u0430') THEN             regexp_replace(lower(abbr) || ' ' || name, E'^(' || lower(abbr) || ') (.*((?:\u0430\u044f)|(?:\u043e\u0435)|(?:\u043e\u0439)|(?:\u0438\u0439)|(?:\u044b\u0439)|(?:-\u0439)|(?:-\u044f)))$', E'\\\\2 \\\\1', 'ig')           WHEN abbr IN ('\u0441\u0430\u0434','\u0431-\u0440') THEN             CASE               WHEN name ~* E'^(.*-\u0439|.*-\u044f|\\\\d+)$' THEN                 name || ' ' || lower(abbrfull)               ELSE                 regexp_replace(lower(abbr) || ' ' || name, E'^(' || lower(abbr) || ') (.*((?:\u043e\u0439)|(?:\u0438\u0439)|(?:\u044b\u0439)|(?:-\u0439)))$', E'\\\\2 \\\\1', 'ig')             END           WHEN abbr IN ('\u043f\u0435\u0440','\u043f\u043b','\u0442\u0443\u043f') THEN             CASE               WHEN name ~* E'^(.*-\u0439|.*-\u044f|\\\\d+)$' THEN                 name || ' ' || lower(abbrfull)               ELSE                 regexp_replace(lower(abbr) || '.' || name, E'^(' || lower(abbr) || E'\\\\.)(.*((?:\u0430\u044f)|(?:\u043e\u0435)|(?:\u043e\u0439)|(?:\u0438\u0439)|(?:\u044b\u0439)|(?:-\u0439)|(?:-\u044f)))$', E'\\\\2 \\\\1', 'ig')             END           WHEN abbr IN ('\u0445','\u0448') THEN               CASE                 WHEN name ~* E'^(.*-\u0439|.*-\u044f|\\\\d+)$' THEN                   name || ' ' || lower(abbrfull)                 ELSE                   regexp_replace(lower(abbr) || '.' || regexp_replace(name, E' ' || lower(abbrfull) || '$', E'', 'ig'), E'^(' || lower(abbr) || E'\\\\.)(.*((?:\u0430\u044f)|(?:\u043e\u0435)|(?:\u043e\u0439)|(?:\u0438\u0439)|(?:\u044b\u0439)|(?:-\u0439)|(?:-\u044f)))$', E'\\\\2 ' || lower(abbrfull), 'ig')               END           WHEN abbr IN ('\u043f\u0440-\u043a\u0442') THEN             CASE               WHEN name ~* E'^(.*-\u0439|.*-\u044f|\\\\d+)$' THEN                 name || ' ' || lower(abbrfull)               ELSE                 regexp_replace(lower('\u043f\u0440-\u0442') || ' ' || name, E'^(' || lower('\u043f\u0440-\u0442') || E')\\\\s(.*((?:\u043e\u0439)|(?:\u0438\u0439)|(?:\u044b\u0439)|(?:-\u0439)|(?:-\u044f)))$', E'\\\\2 \\\\1', 'ig')             END           WHEN abbr IN ('\u043f\u0440\u043e\u0435\u0437\u0434') THEN             CASE               WHEN name ~* E'^(.*-\u0439|.*-\u044f|\\\\d+)$' THEN                 name || ' ' || lower(abbrfull)               ELSE                 regexp_replace(lower('\u043f\u0440-\u0434') || ' ' || name, E'^(' || lower('\u043f\u0440-\u0434') || E')\\\\s(.*((?:\u043e\u0439)|(?:\u0438\u0439)|(?:\u044b\u0439)|(?:-\u0439)|(?:-\u044f)))$', E'\\\\2 \\\\1', 'ig')             END           WHEN abbr IN ('\u0441\u0442\u0440') THEN             CASE               WHEN name ~* E'^\\\\d+-\u0435$' THEN                 name || ' ' || lower(abbrfull)               WHEN name ~* E'^\\\\d+(-[\u0430-\u044f])?$' THEN                 lower(abbrfull) || ' ' || name               ELSE                 name             END           WHEN abbr IN ('\u0430\u043b\u043b\u0435\u044f','\u0431\u0435\u0440\u0435\u0433','\u0431\u0443\u0433\u043e\u0440','\u0432\u0430\u043b','\u0432\u044a\u0435\u0437\u0434','\u0433\u043e\u0440\u043e\u0434\u043e\u043a','\u0434\u043e\u0440','\u0437\u0430\u0435\u0437\u0434','\u043a\u0430\u043d\u0430\u043b','\u043a\u0432-\u043b','\u043a\u043e\u043b\u044c\u0446\u043e','\u043a\u043e\u0441\u0430','\u043b\u0438\u043d\u0438\u044f','\u043c\u043e\u0441\u0442','\u043f\u0430\u0440\u043a','\u043f\u0435\u0440\u0435\u0435\u0437\u0434','\u043f\u043b\u0430\u0442\u0444','\u043f\u043b-\u043a\u0430','\u043f\u043e\u043b\u0443\u0441\u0442\u0430\u043d\u043e\u043a','\u043f\u0440\u043e\u0441\u0435\u043a','\u043f\u0440\u043e\u0441\u0435\u043a\u0430','\u043f\u0440\u043e\u0441\u0435\u043b\u043e\u043a','\u043f\u0440\u043e\u0442\u043e\u043a','\u043f\u0440\u043e\u0443\u043b\u043e\u043a','\u0440\u0437\u0434','\u0440\u044f\u0434\u044b','\u0441\u043a\u0432\u0435\u0440','\u0441\u043f\u0443\u0441\u043a','\u0442\u0440\u0430\u043a\u0442','\u0443\u0447-\u043a','\u0444\u0435\u0440\u043c\u0430') THEN             CASE               WHEN abbr = '\u0434\u043e\u0440' AND name ~* '^(\u0430\/\u0434|\u0430\u0432\u0442\u043e\u0434\u043e\u0440\u043e\u0433\u0430)' THEN                 regexp_replace(name, E'^(\u0430\/\u0434|\u0430\u0432\u0442\u043e\u0434\u043e\u0440\u043e\u0433\u0430)\\\\s', E'\u0430\/\u0434 ', 'ig')               WHEN name ~* E'^(.*-\u0439|.*-\u044f|\\\\d+)$' THEN                 name || ' ' || lower(abbrfull)               ELSE                 regexp_replace(lower(abbrfull) || ' ' || name, E'^(' || lower(abbrfull) || ') (.*((?:\u0430\u044f)|(?:\u043e\u0435)|(?:\u043e\u0439)|(?:\u0438\u0439)|(?:\u044b\u0439)|(?:\u044b\u0435)|(?:-\u0439)|(?:-\u044f)))$', E'\\\\2 \\\\1', 'ig')             END           WHEN abbr IN ('\u0443\u043b') THEN             replace(abbr, '_', ' ') || (CASE WHEN abbr ~ '(-|\/)' THEN '' ELSE '.' END) || '' || name           WHEN abbr IN ('\u043d\u043f','\u0441','\u0434','\u0442\u0435\u0440','\u043f','\u0436\u0438\u043b\u0437\u043e\u043d\u0430','\u0436\u0438\u043b\u0440\u0430\u0439\u043e\u043d','\u0445','\u0441\u0442-\u0446\u0430','\u0440\u043f','\u0440\u0437\u0434','\u043c','\u0441\u0442','\u0443','\u0441\u043d\u0442','\u0441\u043b') THEN             CASE               WHEN name ~* E'^\u043e\u0441\u0442\u0440\u043e\u0432\\\\s+' THEN                 regexp_replace(name, E'^\u043e\u0441\u0442\u0440\u043e\u0432', E'\u043e\u0441\u0442\u0440\u043e\u0432', 'ig')               WHEN name ~* E'^\u043a\u0430\u0437\u0430\u0440\u043c\u0430\\\\s+' THEN                 regexp_replace(name, E'^\u043a\u0430\u0437\u0430\u0440\u043c\u0430', E'\u043a\u0430\u0437\u0430\u0440\u043c\u0430', 'ig')               WHEN name ~* E'^\u043a\u043e\u0440\u0434\u043e\u043d\\\\s+' THEN                 regexp_replace(name, E'^\u043a\u043e\u0440\u0434\u043e\u043d', E'\u043a\u043e\u0440\u0434\u043e\u043d', 'ig')               WHEN name ~* E'^\u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d ' THEN                 regexp_replace(name, E'^\u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d ', '\u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d ', 'ig')               WHEN name ~* E' \u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d$' THEN                 regexp_replace(name, E'^(.*) \u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d$', E'\u0436\u0438\u043b\u043e\u0439 \u0440\u0430\u0439\u043e\u043d \\\\1', 'ig')               WHEN name ~* E'^\u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430 ' THEN                 regexp_replace(name, E'^\u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430 ', '\u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430 ', 'ig')               WHEN name ~* E' \u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430$' THEN                 regexp_replace(name, E'^(.*) \u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430$', E'\u0436\u0438\u043b\u0430\u044f \u0437\u043e\u043d\u0430 \\\\1', 'ig')               WHEN name ~* E'^\u0434\/\u043e ' THEN                 regexp_replace(name, E'^\u0434\/\u043e ', '\u0434\/\u043e ', 'ig')               WHEN name ~* E'^\u043f\/\u043e ' THEN                 regexp_replace(name, E'^\u043f\/\u043e ', '\u043f\/\u043e ', 'ig')               WHEN name ~* E'^\u043f\/\u043b ' THEN                 regexp_replace(name, E'^\u043f\/\u043b ', '\u043f\/\u043b ', 'ig')               WHEN name ~* E'^\u0442\/\u0431 ' THEN                 regexp_replace(name, E'^\u0442\/\u0431 ', '\u0442\/\u0431 ', 'ig')               WHEN name ~* E'^\u0421\u041d\u0422 ' THEN                 regexp_replace(name, E'^\u0421\u041d\u0422 ', '\u0441\u043d\u0442 ', 'ig')               WHEN name ~* E' \u0421\u041d\u0422$' THEN                 regexp_replace(name, E'^(.*) \u0421\u041d\u0422$', E'\u0441\u043d\u0442 \\\\1', 'ig')               WHEN name ~* E'^\u0421\u0414\u0422 ' THEN                 regexp_replace(name, E'^\u0421\u0414\u0422 ', '\u0441\u0434\u0442 ', 'ig')               WHEN name ~* E' \u0421\u0414\u0422$' THEN                 regexp_replace(name, E'^(.*) \u0421\u0414\u0422$', E'\u0441\u0434\u0442 \\\\1', 'ig')               WHEN name ~* E'^\u0421\u0422 ' THEN                 regexp_replace(name, E'^\u0421\u0422 ', '\u0441\u0442 ', 'ig')               WHEN name ~* E' \u0421\u0422$' THEN                 regexp_replace(name, E'^(.*) \u0421\u0422$', E'\u0441\u0442 \\\\1', 'ig')               WHEN name ~* E'^\u0414\u041d\u0422 ' THEN                 regexp_replace(name, E'^\u0414\u041d\u0422 ', '\u0434\u043d\u0442 ', 'ig')               WHEN name ~* E' \u0414\u041d\u0422$' THEN                 regexp_replace(name, E'^(.*) \u0414\u041d\u0422$', E'\u0434\u043d\u0442 \\\\1', 'ig')               WHEN name ~* E'^\u0414\u041d\u041f ' THEN                 regexp_replace(name, E'^\u0414\u041d\u041f ', '\u0434\u043d\u043f ', 'ig')               WHEN name ~* E' \u0414\u041d\u041f$' THEN                 regexp_replace(name, E'^(.*) \u0414\u041d\u041f$', E'\u0434\u043d\u043f \\\\1', 'ig')               WHEN name ~* E'^\u0431\u0443\u0434\u043a\u0430( (\u0436\/\u0434|\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438))?' THEN                 regexp_replace(name, E'^\u0431\u0443\u0434\u043a\u0430( (\u0436\/\u0434|\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438))?', E'\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430', 'ig')               WHEN name ~* E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u0431\u0443\u0434\u043a\u0430' THEN                 regexp_replace(name, E'^\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u0431\u0443\u0434\u043a\u0430', E'\u0436\/\u0434 \u0431\u0443\u0434\u043a\u0430', 'ig')               WHEN name ~* E'^\u043f\u043b\u0430\u0442\u0444.+' THEN                 regexp_replace(name, E'^(\u043f\u043b\u0430\u0442\u0444)\\\\s+', E'\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 ', 'ig')               WHEN name ~* E'^\u043f\u043e\u0441\u0435\u043b\u043e\u043a.+' THEN                 regexp_replace(name, E'^(\u043f\u043e\u0441\u0435\u043b\u043e\u043a)\\\\s+', E'\u043f.', 'ig')               WHEN name ~* E'^(\u0440\u0437\u0434|\u0440\u0430\u0437\u044a\u0435\u0437\u0434).+' THEN                 regexp_replace(name, E'^(\u0440\u0437\u0434|\u0440\u0430\u0437\u044a\u0435\u0437\u0434)\\\\s+', E'\u0440\u0430\u0437\u044a\u0435\u0437\u0434 ', 'ig')               WHEN name ~* E'^\u0443\u0447\u0430\u0441\u0442\u043e\u043a.+' THEN                 regexp_replace(name, E'^(\u0443\u0447\u0430\u0441\u0442\u043e\u043a)\\\\s+', E'\u0443\u0447\u0430\u0441\u0442\u043e\u043a ', 'ig')               WHEN name ~* E'^(\u0443\u0440\u043e\u0447\u0438\u0449\u0435|\u0443\u0440-\u0449\u0435) ' THEN                 regexp_replace(name, E'^(\u0443\u0440\u043e\u0447\u0438\u0449\u0435|\u0443\u0440-\u0449\u0435) ', '\u0443\u0440\u043e\u0447\u0438\u0449\u0435 ', 'ig') --              WHEN name ~* E'^\u0436\/\u0434' THEN --                name               ELSE                 CASE                   WHEN abbr IN ('\u0441', '\u0434', '\u0442\u0435\u0440', '\u043f') THEN                     abbr || '.' || name                   WHEN abbr IN ('\u0436\u0438\u043b\u0437\u043e\u043d\u0430','\u0436\u0438\u043b\u0440\u0430\u0439\u043e\u043d','\u043a\u0432-\u043b','\u0445','\u0441\u0442-\u0446\u0430','\u0440\u043f','\u0440\u0437\u0434','\u043c','\u0441\u0442','\u0443') THEN                     lower(abbrfull) || ' ' || name                   WHEN abbr IN ('\u0441\u043d\u0442') THEN                     abbr || ' ' || name                   WHEN abbr IN ('\u0441\u043b') THEN                     regexp_replace(lower(abbrfull) || ' ' || name, E'^(' || lower(abbrfull) || ') (.*((?:\u0430\u044f)))$', E'\\\\2 \\\\1', 'ig')                   WHEN abbr IN ('\u043d\u043f') THEN                     '\u043d\/\u043f ' || name                   ELSE                     name                 END             END           ELSE             CASE               WHEN name ~* '((?:\u0430\u044f)|(?:\u043e\u0435)|(?:\u043e\u0439)|(?:\u0438\u0439)|(?:\u044b\u0439)|(?:-\u0439)|(?:-\u044f))$' THEN                 name || ' ' || replace(abbr, '_', ' ') || (CASE WHEN abbr ~ '(-|\/)' THEN '' ELSE '.' END)               ELSE                 replace(abbr, '_', ' ') || (CASE WHEN abbr ~ '(-|\/)' THEN '' ELSE '.' END) || name             END         END     END   FROM     (       SELECT         kl.*,         ab.name abbrfull       FROM         (           SELECT ($1).*         ) kl LEFT JOIN         kladr_abbr ab ON           ab.code = kl.abbr AND (             (ab.lvl \/ 100, length(kl.code)) = (5, 15) OR             (ab.lvl \/ 100, length(kl.code)) = (4, 11) OR             (ab.lvl \/ 100, length(kl.code)) = (3,  8) OR             (ab.lvl \/ 100, length(kl.code)) = (2,  5) OR             (ab.lvl \/ 100, length(kl.code)) = (1,  2)           )     ) T $$ LANGUAGE sql;  CREATE OR REPLACE FUNCTION kladr$norm() RETURNS trigger AS $$ BEGIN   -- \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043b\u043e\u0433\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438   NEW.norm = normalize(NEW);   RETURN NEW; END; $$ LANGUAGE plpgsql;  CREATE TRIGGER norm   BEFORE INSERT OR UPDATE OF code, name, abbr   ON kladr     FOR EACH ROW       EXECUTE PROCEDURE kladr$norm();<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/565850\/\"> https:\/\/habr.com\/ru\/articles\/565850\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0432\u0432\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 <strong>\u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u043c\u0443, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u044c<\/strong>, \u0430 \u043f\u043e\u0442\u043e\u043c &#8212; \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e <strong>\u0441\u0442\u0440\u043e\u043a\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u043e-\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0432\u0438\u0434<\/strong>.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u0432\u0438\u0434\u043e\u043c \u0443 \u043d\u0430\u0441 \u0432 \u0441\u0442\u0440\u0430\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9_%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8\">\u041a\u041b\u0410\u0414\u0420<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/fias.nalog.ru\/\">\u0424\u0418\u0410\u0421<\/a>.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0430\u044e\u0449\u0438\u043c, \u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 &#171;\u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e&#187;, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 SQL.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u041a\u041b\u0410\u0414\u0420<\/h2>\n<p>\u0411\u0430\u0437\u0430 \u041a\u041b\u0410\u0414\u0420 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0424\u041d\u0421 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"https:\/\/www.gnivc.ru\/technical_support\/classifiers_reference\/kladr\/\">\u0413\u041d\u0418\u0412\u0426<\/a> \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e) \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f <code>wget, p7zip, dbview, recode \u0438 psql<\/code>.<\/p>\n<h4>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432<\/h4>\n<p>\u0411\u0430\u0437\u0430 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0413\u041d\u0418\u0412\u0426 <strong>\u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443<\/strong> \u0432 \u0432\u0438\u0434\u0435 7z-\u0430\u0440\u0445\u0438\u0432\u0430 <a href=\"https:\/\/gnivc.ru\/html\/gnivcsoft\/KLADR\/Base.7z\">Base.7z<\/a> &#8212; \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c <code>Last-Modified<\/code> \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0440\u0432\u043d\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <code>HEAD<\/code>-\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0443\u0432\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0435\u0436\u0435\u0441\u0443\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"bash\">wget -S https:\/\/gnivc.ru\/html\/gnivcsoft\/KLADR\/Base.7z --limit-rate=8k 2>.hdr<\/code><\/pre>\n<p>\u0412 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c <code>.hdr<\/code> \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430:<\/p>\n<pre><code>...   Last-Modified: Thu, 05 Aug 2021 09:28:39 GMT ...<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e, \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 \u043d\u0435\u0439 \u044d\u0442\u043e\u0442 \u0442\u0430\u0439\u043c\u0441\u0442\u0430\u043c\u043f \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0442\u0430\u0439\u043c\u0441\u0442\u0430\u043c\u043f \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c, \u0440\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432:<\/p>\n<pre><code class=\"bash\">p7zip -d Base.7z<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 7 DBF-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 DOS-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435:<\/p>\n<pre><code>Extracting  ALTNAMES.DBF Extracting  DOMA.DBF Extracting  FLAT.DBF Extracting  KLADR.DBF Extracting  NAMEMAP.DBF Extracting  SOCRBASE.DBF Extracting  STREET.DBF<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0435\u0434\u0438\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 <code>psql<\/code> \u0432 COPY-\u0444\u043e\u0440\u043c\u0430\u0442\u0435:<\/p>\n<pre><code class=\"bash\"># \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u043b\u0435\u0439 DBF #   | DOS2WIN #   | \u0431\u0435\u0440\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 (skip 2 \u0441\u0442\u0440\u043e\u043a\u0438) #   | \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0438\u043c\u0435\u043d\u0430 dbview -b -t -e -o -r ALTNAMES.DBF \\   | recode CP866..CP1251 \\   | tail -n+2 \\   | xargs -l \\   | egrep -io \"^[a-z0-9_]+\"  # ... \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c SQL-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b  # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 DBF, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 '~' #   | \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \"\u0432\u0438\u0441\u044f\u0449\u0438\u0435\" \u0441\u0442\u0440\u043e\u043a\u0438 ([\\t\\r\\n] \u0432 \u0442\u0435\u043b\u0435 \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445) #   | DOS2WIN #   | \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 '\\t', \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0446\u0435\u0432\u044b\u0435 '~', \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c '~'->'\\t' dbview -d~ -b -t ALTNAMES.DBF \\   | sed -e :a -e '\/[\\r\\t]$\/N; s\/[\\r\\t]\\n\/\/g; ta' \\   | recode CP866..CP1251 \\   | sed -e 's\/\\t\/\/g; s\/~\\r\/\/g; s\/~,\/,\/g; s\/~\/\\t\/g' >>.sql<\/code><\/pre>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439-\u0431\u043e\u043b\u044c\u0448\u043e\u0439 SQL-\u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"sql\">CREATE TEMPORARY TABLE \"STREET.DBF\"(   \"NAME\"     varchar,   \"SOCR\"     varchar,   \"CODE\"     varchar,   \"INDEX\"     varchar,   \"GNINMB\"     varchar,   \"UNO\"     varchar,   \"OCATD\"     varchar ); COPY \"STREET.DBF\"(   \"NAME\",   \"SOCR\",   \"CODE\",   \"INDEX\",   \"GNINMB\",   \"UNO\",   \"OCATD\" ) FROM stdin; \u0410\u0431\u0430\u0434\u0437\u0435\u0445\u0441\u043a\u0430\u044f     \u0443\u043b      01000001000000100       385013  0105            79401000000 \u0410\u0431\u0440\u0438\u043a\u043e\u0441\u043e\u0432\u0430\u044f     \u0443\u043b      01000001000000200       385013  0105            79401000000 \u0410\u0432\u0438\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439     \u043f\u0435\u0440     01000001000000300       385006  0105            79401000000 \u0410\u0432\u0442\u043e\u0434\u043e\u0440\u043e\u0433\u0430 7    \u0443\u043b      01000001000000400       385019  0105            79401000000 ...<\/code><\/pre>\n<h2>\u0418\u043c\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0430\u0440\u0445\u0438\u0432\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 DOS-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435, \u043d\u043e \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0436 \u043d\u0435\u043c\u043e\u0434\u043d\u043e, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0435\u043c \u043d\u0430\u0448\u0443 \u0431\u0430\u0437\u0443 \u0432 WIN1251 &#8212; \u043e\u043d\u0430 \u0442\u043e\u0436\u0435 \u043e\u0434\u043d\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0441\u0442\u0430\u043d\u0443\u0442 \u0442\u044f\u0436\u0435\u043b\u0435\u0435:<\/p>\n<pre><code class=\"sql\">CREATE DATABASE kladr   WITH ENCODING='WIN1251'     OWNER=postgres     TEMPLATE=template0     LC_COLLATE='ru_RU.CP1251'     LC_CTYPE='ru_RU.CP1251'     CONNECTION LIMIT=-1;<\/code><\/pre>\n<pre><code class=\"sql\">-- \u043b\u043e\u0433 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 CREATE TABLE kladr_chk(   id     serial       PRIMARY KEY,   ts     timestamp       DEFAULT now(),   hostname     varchar );  -- \u043b\u043e\u0433 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 CREATE TABLE kladr_upd(   id     serial       PRIMARY KEY,   ts     timestamp       DEFAULT now(),   lm     varchar,   hostname     varchar );<\/code><\/pre>\n<h4>\u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/h4>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u043c\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0413\u041d\u0418\u0412\u0426 \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 (\u043c\u0430\u043b\u043e \u043b\u0438, \u043e\u0434\u0438\u043d \u0438\u0437 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u043f\u0440\u0438\u043a\u0430\u0436\u0435\u0442 \u0434\u043e\u043b\u0433\u043e \u0436\u0438\u0442\u044c), \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u0437\u0430\u0449\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0438 &#8212; \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 <code>.sql<\/code>:<\/p>\n<pre><code class=\"sql\">-- \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0430\u0432\u0442\u043e\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 SET statement_timeout = 0; -- \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c WIN-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 SET client_encoding = 'WIN1251'; -- \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c application_name \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 SET application_name = 'kladr : import [`hostname`]'; -- \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \"\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435\" \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;   -- \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e upd-\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \"\u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f\" \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439   LOCK TABLE kladr_upd IN EXCLUSIVE MODE NOWAIT;   -- \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a   INSERT INTO kladr_chk(hostname) VALUES('`hostname`');   -- \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c Last-Modified \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0431\u0430\u0437\u0435   SELECT lm FROM kladr_upd ORDER BY id DESC LIMIT 1;   -- \u0435\u0441\u043b\u0438 lm \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442     -- \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e DBF     CREATE TEMPORARY TABLE ...;     COPY ... FROM stdin;     ...     \\.     --     -- \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \"\u0432\u0435\u0440\u0441\u0438\u044e\" \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b     INSERT INTO kladr_upd(lm, hostname) VALUES('$lm', '`hostname`'); COMMIT;<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0435\u043c, \u043a\u0442\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439, \u0438 \u043a\u043e\u043c\u0443 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442:<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u043d\u043e\u0433\u043e bash-\u043a\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">#!\/bin\/sh  . `dirname \"$0\"`\/..\/app.conf  echo \"`date '+%F %T'` ==== Connecting to DB : $pghost:$pgport:$pgbase:$pguser\" # \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414 psql -t -c 'SELECT 1' -h $pghost -p $pgport -U $pguser -w $pgbase 1>\/dev\/null 2>\/dev\/null rv=\"$?\" if [ \"$rv\" != \"0\" ]; then   echo \"$pghost:$pgport:$pgbase:$pguser:$pgpass\" >>~\/.pgpass   chmod 0600 ~\/.pgpass   psql -t -c 'SELECT 1' -h $pghost -p $pgport -U $pguser -w $pgbase 1>\/dev\/null 2>\/dev\/null   rv=\"$?\" fi  if [ \"$rv\" != \"0\" ]; then   echo \"DB not connected : $pghost:$pgport:$pgbase:$pguser\"   exit 1 fi  # \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 _dbf #_dbf=`mktemp -d` mkdir .\/dbf &amp;&amp; chmod 777 .\/dbf _dbf=`readlink -f .\/dbf` rm -rf ${_dbf} 2>\/dev\/null mkdir ${_dbf} 2>\/dev\/null touch ${_dbf}\/.sql dir=`dirname \"$0\"` dir=`readlink -f $dir`  ## \u0438\u043c\u043f\u043e\u0440\u0442 \u0431\u0430\u0437\u044b \u041a\u041b\u0410\u0414\u0420'\u0430 \u0432 _dbf\/.sql # \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0430\u0432\u0442\u043e\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 echo \"SET statement_timeout = 0;\" >>${_dbf}\/.sql # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c WIN-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 echo \"SET client_encoding = 'WIN1251';\" >>${_dbf}\/.sql # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c application_name \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 echo \"SET application_name = 'kladr : import [`hostname`]';\" >>${_dbf}\/.sql # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \"\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435\" \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 echo \"BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;\" >>${_dbf}\/.sql # \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e upd-\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \"\u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f\" \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 echo \"LOCK TABLE kladr_upd IN EXCLUSIVE MODE NOWAIT;\" >>${_dbf}\/.sql # \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a echo \"INSERT INTO kladr_chk(hostname) VALUES('`hostname`');\" >>${_dbf}\/.sql  # \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 #tmp=`mktemp -d` mkdir .\/tmp &amp;&amp; chmod 777 .\/tmp tmp=`readlink -f .\/tmp` cd $tmp  echo \"`date '+%F %T'` ==== Downloading : $source\" # \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0430\u0437\u044b \u041a\u041b\u0410\u0414\u0420'\u0430 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0431\u0435\u0437 wget -S $source --limit-rate=8k 2>.hdr # wget -S $source 2>.hdr  echo \"`date '+%F %T'` ==== Comparing 'Last-Modified'\" rc=`cat .hdr | egrep 'HTTP\/[0-9]\\.[0-9] [0-9]{3}' | sed -e 's\/^[ ]*HTTP\\\/[0-9]\\.[0-9][ ]*\\([0-9]*\\).*$\/\\1\/i' | egrep -v '301' | head -1` lm=`cat .hdr | egrep 'Last-Modified' | sed -e 's\/^[ ]*Last-Modified:[ ]*\/\/i' | head -1` echo \"  -- HTTP code : $rc\" echo \"  -- HTTP 'Last-Modified' : $lm\" pglm=`psql -h $pghost -p $pgport -U $pguser -w -t -c 'SELECT lm FROM kladr_upd ORDER BY id DESC LIMIT 1' $pgbase | sed -e 's\/^[ ]*\/\/i'` echo \"  -- PGDB 'Last-Modified' : $pglm\"  if [ \"$rc\" = \"200\" ] &amp;&amp; [ \"$lm\" != \"\" ] &amp;&amp; [ \"$lm\" != \"$pglm\" ]; then   # \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0431\u0430\u0437\u044b   echo \"`date '+%F %T'` ==== Unpacking 7z\"   p7zip -d Base.7z 1>\/dev\/null 2>\/dev\/null   cp $tmp\/* ${_dbf}   cd $dir    echo \"`date '+%F %T'` ==== Processing DBF\"   # \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0441\u0435\u0445 .DBF   for dbf in `find ${_dbf} -maxdepth 1 -iname '*.DBF'`; do     dbfn=`basename $dbf | tr '[:lower:]' '[:upper:]'`     # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432     echo \"  -- DBF : $dbfn\"     echo \"    -- header\"     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u043b\u0435\u0439 DBF | DOS2WIN | \u0431\u0435\u0440\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 (skip 2 \u0441\u0442\u0440\u043e\u043a\u0438) | \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0438\u043c\u0435\u043d\u0430     fld=`dbview -b -t -e -o -r $dbf | recode CP866..CP1251 | tail -n+2 | xargs -l | egrep -io \"^[a-z0-9_]+\"`     echo \"CREATE TEMPORARY TABLE \\\"$dbfn\\\"(\" >>${_dbf}\/.sql     fl=\"0\"     for i in ${fld}; do       [ \"$fl\" = \"1\" ] &amp;&amp; echo ',' >>${_dbf}\/.sql       echo -n \"  \\\"$i\\\"\\n    varchar\" >>${_dbf}\/.sql       fl=\"1\"     done     echo \");\" >>${_dbf}\/.sql     # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445     echo \"    -- data\"     echo \"COPY \\\"$dbfn\\\"(\" >>${_dbf}\/.sql     fl=\"0\"     for i in ${fld}; do       [ \"$fl\" = \"1\" ] &amp;&amp; echo ',' >>${_dbf}\/.sql       echo -n \"  \\\"$i\\\"\" >>${_dbf}\/.sql       fl=\"1\"     done     echo \") FROM stdin;\" >>${_dbf}\/.sql     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 DBF, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 '~' | \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \"\u0432\u0438\u0441\u044f\u0449\u0438\u0435\" \u0441\u0442\u0440\u043e\u043a\u0438 ([\\t\\r\\n] \u0432 \u0442\u0435\u043b\u0435 \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445) | DOS2WIN | \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 '\\t' | \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0446\u0435\u0432\u044b\u0435 ';' | \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c ';'->'\\t'     dbview -d~ -b -t $dbf | sed -e :a -e '\/[\\r\\t]$\/N; s\/[\\r\\t]\\n\/\/g; ta' | recode CP866..CP1251 | sed -e 's\/\\t\/\/g; s\/~\\r\/\/g; s\/~,\/,\/g; s\/~\/\\t\/g' >>${_dbf}\/.sql     echo \"\\\\.\" >>${_dbf}\/.sql   done    # \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b - \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 sql-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0430   ls ${dir}\/import\/*.sql | xargs -l readlink -f | xargs -l -I{} cat {} >>${_dbf}\/.sql   # \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043c\u0435\u0442\u043a\u0438<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-386736","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/386736","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=386736"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/386736\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=386736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=386736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=386736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}