{"id":492884,"date":"2026-08-31T07:32:34","date_gmt":"2026-08-31T07:32:34","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=492884"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2026-08-31T07:32:34","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=492884","title":{"rendered":"ora2pg \u043c\u043e\u043b\u0447\u0430 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u043b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0438 \u044d\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0431\u0438\u0434\u043d\u043e\u0435"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2><\/h2>\n<p>Ora2pg \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0441\u0445\u0435\u043c\u0443 \u0441 Oracle \u043d\u0430 PostgreSQL, \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435 \u043e\u0441\u0438\u043b\u0438\u043b: \u043e\u043d \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0438 \u043d\u0435 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f, \u0430 \u043c\u043e\u043b\u0447\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e.<\/p>\n<p>\u0411\u0435\u0440\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443. \u0422\u0430\u043a\u0438\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u043b\u0435\u0436\u0430\u0442 \u0441\u043e\u0442\u043d\u044f\u043c\u0438:<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE PROCEDURE run_as_caller  AUTHID CURRENT_USERISBEGIN  DELETE FROM staging;END;\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 ora2pg. \u0421\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code class=\"sql\">-- Generated by Ora2Pg, the Oracle database Schema converter, version 25.0-- Nothing found of type PROCEDURE<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0435\u0442. \u041a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u043e\u043b\u044c, \u0432 \u043b\u043e\u0433\u0435 \u043d\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u043d\u0438 \u0434\u0430\u0436\u0435 DEBUG-\u0441\u0442\u0440\u043e\u043a\u0438 <code>unhandled line<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 <code>CREATE CLUSTER<\/code>. \u041f\u0440\u043e\u0441\u0442\u043e \u0442\u0438\u0448\u0438\u043d\u0430.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0435 \u0434\u0435\u0432\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442. \u0412\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0447\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c. \u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435.<\/p>\n<h3>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441 AUTHID<\/h3>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u0431\u044b\u043b\u0430, \u0447\u0442\u043e \u044f \u043d\u0430\u043b\u0430\u0436\u0430\u043b \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0423\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 AUTHID, \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u043c:<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE PROCEDURE run_as_callerISBEGIN  DELETE FROM staging;END;\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"sql\">CREATE OR REPLACE PROCEDURE run_as_caller () AS $body$BEGIN  DELETE FROM staging;END;$body$LANGUAGE PLPGSQL;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0448\u0442\u0430\u0442\u043d\u043e. \u0417\u043d\u0430\u0447\u0438\u0442 \u0434\u0435\u043b\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0435 \u043f\u0440\u0430\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. <code>AUTHID DEFINER<\/code> \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0442\u0430\u043a \u0436\u0435, \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b.<\/p>\n<p>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f: \u0432 utPLSQL, \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f Oracle, AUTHID \u0441\u0442\u043e\u0438\u0442 \u0432 50 \u043c\u0435\u0441\u0442\u0430\u0445. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 package spec:<\/p>\n<pre><code class=\"sql\">create or replace noneditionable package ut_runner authid current_user iscreate or replace noneditionable package ut_coverage_helper authid definer is<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043d\u0435 \u0434\u043e\u0435\u0434\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e, \u0438 \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0432\u044b \u043e\u0431 \u044d\u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u0437\u043e\u0432\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443.<\/p>\n<p><strong>\u0427\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c.<\/strong> \u0423\u0431\u0440\u0430\u0442\u044c \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0443 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u0434\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438, \u0438\u043d\u0430\u0447\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0412 \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c: <code>AUTHID DEFINER<\/code> \u044d\u0442\u043e <code>SECURITY DEFINER<\/code>, <code>AUTHID CURRENT_USER<\/code> \u044d\u0442\u043e <code>SECURITY INVOKER<\/code>, \u0438 \u043e\u043d \u0436\u0435 \u0432 PostgreSQL \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041e\u0431\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u0430\u043d\u0430\u043b\u043e\u0433 \u043f\u0440\u044f\u043c\u043e\u0439.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e \u043a\u0430\u043a\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u0440\u0435\u0447\u044c: \u0432\u043e\u0442 \u043e\u0434\u0438\u043d \u043f\u0430\u043a\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0442\u0438\u043f\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0436\u0438\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0412\u043e\u0441\u0435\u043c\u044c \u043d\u0430\u0445\u043e\u0434\u043e\u043a \u043d\u0430 45 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e96\/408\/565\/e96408565cddc4fd37d56a30e29b901f.png\" alt=\"\u041d\u0430\u0445\u043e\u0434\u043a\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435\" title=\"\u041d\u0430\u0445\u043e\u0434\u043a\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435\" width=\"1460\" height=\"495\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e96\/408\/565\/e96408565cddc4fd37d56a30e29b901f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e96\/408\/565\/e96408565cddc4fd37d56a30e29b901f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0445\u043e\u0434\u043a\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0440\u043e\u0432\u043d\u043e \u044d\u0442\u043e. \u041e\u0442 \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043a \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u043c, \u043e\u0431\u0449\u0435\u0435 \u0443 \u043d\u0438\u0445 \u043e\u0434\u043d\u043e: ora2pg \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0438 \u043d\u0435 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h3>TO_DATE \u0441 RR \u0434\u0430\u0435\u0442 1 \u0433\u043e\u0434 \u0434\u043e \u043d\u0430\u0448\u0435\u0439 \u044d\u0440\u044b<\/h3>\n<pre><code class=\"sql\">SELECT TO_DATE('85-06-01', 'RR-MM-DD') FROM dual;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>RR<\/code> \u044d\u0442\u043e \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0434\u0432\u0443\u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u0433\u043e\u0434\u0430: 00-49 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u0432\u0443\u0445\u0442\u044b\u0441\u044f\u0447\u043d\u044b\u0435, 50-99 \u043a\u0430\u043a \u0442\u044b\u0441\u044f\u0447\u0430 \u0434\u0435\u0432\u044f\u0442\u044c\u0441\u043e\u0442. \u0412 Oracle \u0442\u0443\u0442 1985 \u0433\u043e\u0434.<\/p>\n<p>ora2pg \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0430 PostgreSQL 16:<\/p>\n<pre><code>      d1       |      d2---------------+--------------- 0001-06-01 BC | 0001-06-01 BC(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u0442, \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0432\u0435\u0440\u043d\u0443\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. PostgreSQL \u043a\u043e\u0434\u0430 <code>RR<\/code> \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0438 \u043c\u043e\u043b\u0447\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0432\u043e\u0435.<\/p>\n<p>\u0412 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 Oracle (db-sample-schemas) \u0442\u0430\u043a\u0438\u0445 INSERT-\u043e\u0432 211 \u0448\u0442\u0443\u043a:<\/p>\n<pre><code class=\"sql\">INSERT INTO orders VALUES (2458,TO_TIMESTAMP('16-AUG-07 02.34.12.234359 PM','DD-MON-RR HH.MI.SS.FF AM','NLS_DATE_LANGUAGE=American')<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0432\u0441\u0435, \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u0436\u0430\u043b\u043e\u0431\u044b.<\/p>\n<p><strong>\u0427\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c, \u0438 \u0442\u0443\u0442 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/strong> \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0440\u044b\u0432 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>RR<\/code> \u043d\u0430 <code>YY<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u042f \u0442\u0430\u043a \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438. \u041f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b:<\/p>\n<pre><code class=\"sql\">SELECT to_date('49-06-01','YY-MM-DD') AS yy49,       to_date('50-06-01','YY-MM-DD') AS yy50,       to_date('69-06-01','YY-MM-DD') AS yy69,       to_date('70-06-01','YY-MM-DD') AS yy70;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>    yy49    |    yy50    |    yy69    |    yy70------------+------------+------------+------------ 2049-06-01 | 2050-06-01 | 2069-06-01 | 1970-06-01<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0440\u043e\u0433 \u0443 PostgreSQL 69\/70, \u0443 \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u0441\u043a\u043e\u0433\u043e <code>RR<\/code> \u043f\u043e\u0440\u043e\u0433 49\/50. \u0421\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u0430 00-49 \u0438 70-99, \u0430 \u043d\u0430 50-69 \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043d\u0430 \u0441\u0442\u043e \u043b\u0435\u0442: <code>'65'<\/code> \u0432 Oracle \u044d\u0442\u043e 1965, \u0430 \u0447\u0435\u0440\u0435\u0437 <code>YY<\/code> \u0432 PostgreSQL \u044d\u0442\u043e 2065. \u0420\u043e\u0432\u043d\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0434\u0430\u0442 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0432\u0435\u043a\u0430.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0433\u0440\u043e\u043c\u043a\u0443\u044e \u043f\u043e\u043b\u043e\u043c\u043a\u0443 \u043d\u0430 \u0442\u0438\u0445\u0443\u044e, \u0438 \u044d\u0442\u043e \u0445\u0443\u0436\u0435. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u0437\u043d\u0430\u0447\u043d\u043e\u043c\u0443 \u0433\u043e\u0434\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>YYYY<\/code>.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u043e, \u0447\u0442\u043e ora2pg \u0432\u043e\u043e\u0431\u0449\u0435-\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c <code>RR<\/code>: \u0432 <code>TO_CHAR<\/code> \u043e\u043d \u0447\u0435\u0441\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 <code>YY<\/code>. \u0410 \u0432 <code>TO_DATE<\/code> \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442. \u0427\u0438\u043d\u0438\u0442 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0435 \u043d\u0430\u0434\u043e (\u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0435 RR \u0438 YY \u0434\u0430\u044e\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435), \u0438 \u043d\u0435 \u0447\u0438\u043d\u0438\u0442 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0430\u0434\u043e.<\/p>\n<h3>LONG RAW \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 text \u0432\u043c\u0435\u0441\u0442\u043e bytea<\/h3>\n<pre><code class=\"sql\">CREATE TABLE binstuff (    id       NUMBER PRIMARY KEY,    a_raw    RAW(200),    a_long   LONG,    a_lraw   LONG RAW,    a_blob   BLOB,    a_clob   CLOB,    a_bfile  BFILE);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0432\u0430\u043b\u0438\u043b \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u0435:<\/p>\n<pre><code class=\"sql\">CREATE TABLE binstuff (id bigint,a_raw bytea,a_long text,a_lraw text,a_blob bytea,a_clob text,a_bfile bytea) ;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>RAW(200)<\/code>, <code>BLOB<\/code>, <code>BFILE<\/code> \u0432 <code>bytea<\/code>. \u0410 <code>LONG RAW<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439, \u0432 <code>text<\/code>.<\/p>\n<p>\u041f\u043e\u043b\u0435\u0437 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 ora2pg, <code>lib\/Ora2Pg\/<\/code><a href=\"http:\/\/Oracle.pm\" rel=\"noopener nofollow\"><code>Oracle.pm<\/code><\/a>, \u0441\u0442\u0440\u043e\u043a\u0430 45:<\/p>\n<pre><code class=\"perl\">'LONG RAW' =&gt; 'bytea',<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f <code>DATA_TYPE<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0431\u043e\u0440 \u0438 \u043d\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441, \u0430 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439. \u041f\u043e\u0445\u043e\u0436\u0435, \u043f\u0430\u0440\u0441\u0435\u0440 DDL \u0440\u0435\u0436\u0435\u0442 \u043f\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u0443 \u0438 \u043c\u0430\u0442\u0447\u0438\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 <code>LONG<\/code>.<\/p>\n<p><code>CREATE TABLE<\/code> \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0438\u0441\u0442\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u0445\u0435\u043c\u044b \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435. \u041f\u0440\u0438\u043b\u0435\u0442\u0438\u0442 \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 <code>text<\/code> \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043d\u0435 \u043b\u0435\u0437\u0443\u0442:<\/p>\n<pre><code>ERROR:  invalid byte sequence for encoding \"UTF8\": 0x00<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0427\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c.<\/strong> \u041f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0438\u043f \u043d\u0430 <code>bytea<\/code> \u0440\u0443\u043a\u0430\u043c\u0438. \u042d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0441\u0430\u043c ora2pg \u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u0443\u0435\u0442.<\/p>\n<h3>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430<\/h3>\n<pre><code class=\"sql\">CREATE OR REPLACE PROCEDURE ins_one IS  dup_key EXCEPTION;  PRAGMA EXCEPTION_INIT(dup_key, -1);BEGIN  INSERT INTO uniq_t (id) VALUES (1);EXCEPTION  WHEN dup_key THEN    DBMS_OUTPUT.PUT_LINE('handled duplicate');END;\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>ORA-00001 \u044d\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432 Oracle \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 <code>handled duplicate<\/code>. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE PROCEDURE ins_one () AS $body$BEGIN  INSERT INTO uniq_t(id) VALUES (1);EXCEPTION  WHEN SQLSTATE '50001' THEN    RAISE NOTICE 'handled duplicate';END;$body$<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>PRAGMA \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d \u043d\u0430 <code>SQLSTATE '50001'<\/code>. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043d\u0430 <code>-1<\/code> \u0438 \u043d\u0430 <code>-60<\/code> (\u0432\u0437\u0430\u0438\u043c\u043e\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430), \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 <code>50001<\/code>. \u042d\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u043d\u043e\u043c\u0435\u0440 ORA \u0432 \u043d\u0435\u0435 \u043d\u0435 \u0437\u0430\u0435\u0437\u0436\u0430\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0436\u0438\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code>ERROR:  duplicate key value violates unique constraint \"uniq_t_pkey\"CONTEXT:  SQL statement \"INSERT INTO uniq_t(id) VALUES (1)\"PL\/pgSQL function ins_one() line 3 at SQL statement<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043a\u043e\u0434 PostgreSQL \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 <code>23505<\/code>, \u0430 <code>50001<\/code> \u043e\u043d \u043d\u0435 \u0432\u043e\u0437\u0431\u0443\u0436\u0434\u0430\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0442\u0430\u043b \u043c\u0435\u0440\u0442\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0438 \u043e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 Oracle \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0433\u043b\u043e\u0442\u0430\u043b\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u043b\u0435\u0442\u0438\u0442 \u043d\u0430\u0440\u0443\u0436\u0443.<\/p>\n<p>\u0412 utPLSQL \u0438 Logger \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 44.<\/p>\n<p><strong>\u0427\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c.<\/strong> \u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 ORA \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c PostgreSQL \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>50001<\/code>. \u0427\u0438\u0442\u0430\u0435\u043c\u0435\u0435 \u0447\u0435\u0440\u0435\u0437 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043e\u043d\u0438 \u0436\u0435 \u0432 PL\/pgSQL \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 <code>WHEN<\/code>.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u0440\u0442\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e. \u041f\u0440\u0430\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u044f \u0441\u043d\u044f\u043b \u0441 \u0436\u0438\u0432\u043e\u0433\u043e PostgreSQL 16, \u0432\u043e\u0437\u0431\u0443\u0436\u0434\u0430\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u044f <code>SQLSTATE<\/code>. \u041b\u0435\u0432\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430, \u043d\u043e\u043c\u0435\u0440\u0430 ORA, \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Oracle: \u0431\u0430\u0437\u044b \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0437\u0430 \u043d\u0435\u0435 \u0440\u0443\u0447\u0430\u044e\u0441\u044c \u0441\u043b\u0430\u0431\u0435\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Oracle<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">SQLSTATE<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0432 PL\/pgSQL<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-00001<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">23505<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>unique_violation<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-00060<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0437\u0430\u0438\u043c\u043e\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">40P01<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>deadlock_detected<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-02291<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">23503<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>foreign_key_violation<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-02292<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0435\u0441\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u044f\u044f \u0437\u0430\u043f\u0438\u0441\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">23503<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>foreign_key_violation<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-01400<\/p>\n<\/td>\n<td>\n<p align=\"left\">NULL \u0432 NOT NULL \u0441\u0442\u043e\u043b\u0431\u0435\u0446<\/p>\n<\/td>\n<td>\n<p align=\"left\">23502<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>not_null_violation<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-02290<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 CHECK<\/p>\n<\/td>\n<td>\n<p align=\"left\">23514<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>check_violation<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-01403<\/p>\n<\/td>\n<td>\n<p align=\"left\">NO_DATA_FOUND<\/p>\n<\/td>\n<td>\n<p align=\"left\">P0002<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>no_data_found<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-01422<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">P0003<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>too_many_rows<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-12899<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0432\u043b\u0435\u0437\u043b\u0430 \u0432 \u0441\u0442\u043e\u043b\u0431\u0435\u0446<\/p>\n<\/td>\n<td>\n<p align=\"left\">22001<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>string_data_right_truncation<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-01438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0447\u0438\u0441\u043b\u043e \u043d\u0435 \u0432\u043b\u0435\u0437\u043b\u043e \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">22003<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>numeric_value_out_of_range<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-01476<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u043e\u043b\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">22012<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>division_by_zero<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORA-01722<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435 \u0447\u0438\u0441\u043b\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0436\u0434\u0430\u043b\u0438 \u0447\u0438\u0441\u043b\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">22P02<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>invalid_text_representation<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0442\u043e\u0438\u043b\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c: <strong>\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0435, \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u0430\u0435\u0442\u0435\u0441\u044c<\/strong>. ORA-02291 \u0438 ORA-02292 \u0432 Oracle \u044d\u0442\u043e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 (\u043d\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043f\u0440\u043e\u0442\u0438\u0432 \u00ab\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043c\u043e\u043a, \u043d\u0435 \u0434\u0430\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u044c\u00bb), \u0430 PostgreSQL \u043d\u0430 \u043e\u0431\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0434\u043d\u0438\u043c 23503, \u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0412 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0445\u0443\u0436\u0435: ORA-06502 (<code>numeric or value error<\/code>) \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e \u0432 22001, \u0442\u043e \u0432 22003. \u0422\u0430\u043a \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0438 \u0440\u0435\u0448\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u043e\u0432\u0438\u043b.<\/p>\n<h3>\u0415\u0449\u0435 \u043f\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u0442\u044c<\/h3>\n<p><strong>FOLLOWS \u0443 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u043b\u043e\u043c\u0430\u0435\u0442 \u043d\u0435 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0430 \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/strong><\/p>\n<p>\u0412 Oracle \u044d\u0442\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430 \u00ab\u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0439 \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u00bb. ora2pg \u0435\u0435 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442, \u0430 \u0440\u043e\u043d\u044f\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0442\u0435\u043b\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043c\u0435\u0436\u0434\u0443 <code>AS $BODY$<\/code> \u0438 <code>BEGIN<\/code>:<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE FUNCTION trigger_fct_trg_b() RETURNS trigger AS $BODY$FOLLOWS trg_aBEGIN  NEW.audited := 'Y';RETURN NEW;END$BODY$<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>CREATE FUNCTION<\/code> \u0438 <code>CREATE TRIGGER<\/code> \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0434\u0430\u043c\u043f\u0435 ora2pg \u0441\u0442\u043e\u0438\u0442 <code>check_function_bodies = false<\/code> \u0438 \u0442\u0435\u043b\u043e \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0410 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 INSERT:<\/p>\n<pre><code>ERROR:  syntax error at or near \"FOLLOWS\"LINE 2: FOLLOWS trg_a<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c \u043d\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432, \u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u042d\u0442\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: \u0434\u043e \u043f\u0440\u043e\u0434\u0430 \u0434\u043e\u0435\u0437\u0436\u0430\u0435\u0442 \u043c\u043e\u043b\u0447\u0430.<\/p>\n<p>\u0427\u0438\u043d\u0438\u0442\u044c: \u0432 PostgreSQL \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u00ab\u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e-\u0442\u043e\u00bb \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0438 \u0438\u0434\u0443\u0442 \u043f\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0443 \u0438\u043c\u0435\u043d. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e: <code>t10_first<\/code> \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0440\u0430\u043d\u044c\u0448\u0435 <code>t20_second<\/code>, \u0445\u043e\u0442\u044f \u0441\u043e\u0437\u0434\u0430\u043d \u0431\u044b\u043b \u043f\u043e\u0437\u0436\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0443 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c, \u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/p>\n<p><strong>WITH READ ONLY \u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442 \u0431\u0435\u0441\u0441\u043b\u0435\u0434\u043d\u043e.<\/strong><\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE VIEW v_emp AS  SELECT emp_id, name FROM employees  WITH READ ONLY;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435:<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE VIEW v_emp AS SELECT emp_id, name FROM employees;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0433\u043e\u0432\u043e\u0440\u043a\u0438 \u043d\u0435\u0442. \u0418 \u0432\u043e\u0442 \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430: \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 PostgreSQL \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u043e\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442.<\/p>\n<pre><code>INSERT 0 1 emp_id |               name--------+----------------------------------    999 | written through a READ ONLY view(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0435\u0433\u043b\u0430 \u0432 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u0412 Oracle \u0442\u0443\u0442 \u0431\u044b\u043b\u043e \u0431\u044b ORA-42399. \u0417\u0430\u0449\u0438\u0442\u0430, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0438\u0448\u0435\u0442.<\/p>\n<p>\u0427\u0438\u043d\u0438\u0442\u044c: \u043f\u0440\u0430\u0432\u0430\u043c\u0438 (<code>REVOKE INSERT, UPDATE, DELETE ON &lt;view&gt;<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u0434\u0430\u0435\u0442 <code>permission denied for view<\/code>) \u043b\u0438\u0431\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u043c <code>INSTEAD OF<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p><strong>ROWNUM \u0432 UPDATE \u0438 DELETE.<\/strong><\/p>\n<p>ora2pg \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 <code>WHERE ROWNUM &lt;= 10<\/code> \u0432 <code>LIMIT 10<\/code>. \u0414\u043b\u044f SELECT \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041d\u043e \u0443 UPDATE \u0438 DELETE \u0432 PostgreSQL \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e LIMIT \u043d\u0435\u0442:<\/p>\n<pre><code>ERROR:  syntax error at or near \"LIMIT\"LINE 1: UPDATE employees SET bonus = 0 LIMIT 10;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c: \u043f\u0430\u043d\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044e ROWNUM \u043d\u0435 \u043d\u0430\u0434\u043e. \u0412\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0432\u0441\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"sql\">DELETE FROM employees WHERE emp_id IN (SELECT emp_id FROM staff LIMIT 5);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 PostgreSQL. \u041b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 ROWNUM \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u044f\u043c\u043e \u0432 DML.<\/p>\n<p>\u0427\u0438\u043d\u0438\u0442\u044c: \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443. \u0418 \u0442\u0443\u0434\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c <code>ORDER BY<\/code>.<\/p>\n<p>\u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439. \u0412 Oracle <code>ROWNUM<\/code> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0434\u043e<\/strong> \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0430 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0435 \u0431\u044b\u043b\u043e <code>WHERE ROWNUM &lt;= 10 ORDER BY created_at<\/code>, \u0442\u043e Oracle \u0431\u0440\u0430\u043b \u0434\u0435\u0441\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u044d\u0442\u0443 \u0434\u0435\u0441\u044f\u0442\u043a\u0443. \u041d\u0435 \u0434\u0435\u0441\u044f\u0442\u044c \u0441\u0430\u043c\u044b\u0445 \u0441\u0442\u0430\u0440\u044b\u0445, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0443\u043c\u0430\u044e\u0442 \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f\u0432\u043d\u044b\u0439 <code>ORDER BY<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 PostgreSQL \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u0431\u043b\u0438\u0436\u0435 \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0443\u00bb, \u043e\u043d \u0447\u0435\u0441\u0442\u043d\u0435\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430: \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440 \u0441\u0442\u0440\u043e\u043a \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0442\u0430\u043c, \u0433\u0434\u0435 \u0432 Oracle \u0435\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435: \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0442\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u0447\u0430\u044f\u043d\u043d\u043e <strong>\u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c<\/strong> \u0434\u0430\u0432\u043d\u044e\u044e \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043a\u0442\u043e-\u0442\u043e \u043c\u043e\u0433 \u043e\u043f\u0435\u0440\u0435\u0442\u044c\u0441\u044f. \u0421\u0442\u043e\u0438\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 UPDATE \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u0435\u043b\u0430\u043b.<\/p>\n<p><strong>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c database.<\/strong><\/p>\n<p>\u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0431\u0430\u0437\u044b, \u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE TRIGGER trg_logonAFTER LOGON ON DATABASEBEGIN  INSERT INTO login_audit (who, when_) VALUES (USER, SYSDATE);END;\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>ora2pg \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u0438\u0433\u0433\u0435\u0440, \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0432 \u0441\u043b\u043e\u0432\u043e <code>database<\/code> \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u043c\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"sql\">CREATE TRIGGER trg_logonAFTER LOGON ON database FOR EACH ROWEXECUTE PROCEDURE trigger_fct_trg_logon();<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>ERROR:  syntax error at or near \"LOGON\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 <code>ON SCHEMA<\/code> \u0438 \u0441 \u043b\u044e\u0431\u044b\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u043c: <code>BEFORE DDL<\/code>, <code>AFTER SERVERERROR<\/code>, <code>STARTUP<\/code>.<\/p>\n<p>\u0427\u0438\u043d\u0438\u0442\u044c: \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0440\u0435\u0446\u0435\u043f\u0442\u0430 \u043d\u0435\u0442, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. DDL-\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u044b\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b PostgreSQL (<code>CREATE EVENT TRIGGER ... ON ddl_command_end<\/code>, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b).<\/p>\n<p>\u0410 LOGON, LOGOFF \u0438 SERVERERROR \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435, \u0442\u0430\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0415\u0441\u043b\u0438 LOGON-\u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u043f\u0438\u0441\u0430\u043b \u0430\u0443\u0434\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u0432 PostgreSQL \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430: <code>log_connections<\/code> \u0438 <code>log_disconnections<\/code> (\u043e\u0431\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>off<\/code>, \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 16-\u0439) \u043f\u043b\u044e\u0441 \u0440\u0430\u0437\u0431\u043e\u0440 \u043b\u043e\u0433\u0430, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u0430\u0443\u0434\u0438\u0442 \u043f\u043e\u0431\u043e\u0433\u0430\u0447\u0435, \u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <code>pgaudit<\/code>. \u0414\u043b\u044f SERVERERROR \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e: <code>log_min_error_statement<\/code> \u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043b\u043e\u0433\u0430. \u041e\u0431\u0449\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0437 \u0431\u0430\u0437\u044b \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443, \u0432 \u0441\u0431\u043e\u0440 \u043b\u043e\u0433\u043e\u0432, \u0438 \u0435\u0441\u043b\u0438 \u0430\u0443\u0434\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0443 \u0432\u0430\u0441 \u0431\u044b\u043b \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c, \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u0430 \u043d\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 \u0432 \u0447\u0435\u043a\u043b\u0438\u0441\u0442\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p><strong>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 q\u2019[\u2026]&#8217;.<\/strong><\/p>\n<p>\u041e\u0440\u0430\u043a\u043b\u043e\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444\u0430\u043c\u0438, \u043d\u0435 \u0443\u0434\u0432\u0430\u0438\u0432\u0430\u044f \u0438\u0445. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0438 PostgreSQL \u0447\u0438\u0442\u0430\u0435\u0442 <code>q<\/code> \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440 \u0443\u0435\u0437\u0436\u0430\u0435\u0442:<\/p>\n<pre><code>ERROR:  mismatched parentheses at or near \"]\"LINE 4:   msg varchar(100) := q'[it's a test]';<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0447\u0438\u0441\u0442\u0430\u044f, \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435.<\/p>\n<p>\u0428\u0442\u0443\u043a\u0430 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0447\u0430\u0441\u0442\u0430\u044f. \u041a\u043e\u0433\u0434\u0430 \u044f \u0433\u043e\u043d\u044f\u043b \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u044b \u043f\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u043a\u043e\u0434\u0443, <code>q'[...]'<\/code> \u0434\u0430\u043b 706 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439, \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0437\u044f\u0442\u044b\u0445. \u0412 \u043e\u0434\u043d\u043e\u043c utPLSQL \u0438\u0445 \u0441\u043e\u0442\u043d\u0438, \u0442\u0430\u043c \u043d\u0430 \u043d\u0438\u0445 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0446\u0435\u043b\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<p>\u0427\u0438\u043d\u0438\u0442\u044c: \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 PostgreSQL, <code>$q$it's a test$q$<\/code>. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0438\u0445 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0434\u0438\u043d \u0432 \u043e\u0434\u0438\u043d \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443.<\/p>\n<h3>\u0427\u0442\u043e \u0435\u0449\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c: \u0442\u0435\u043c \u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u044b \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u044b <code>IGNORE NULLS<\/code> \u0443 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, <code>NLSSORT<\/code>, <code>SYS.ANYDATA<\/code> \u043a\u0430\u043a \u0442\u0438\u043f \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>TABLE(...)<\/code> \u0432\u043e FROM, \u043a\u0443\u0440\u0441\u043e\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>CURSOR(SELECT ...)<\/code>, <code>FOR UPDATE ... WAIT n<\/code>, <code>SUBTYPE ... RANGE<\/code>, <code>SDO_GEOMETRY<\/code>, <code>GOTO<\/code>, <code>&lt;\u043a\u0443\u0440\u0441\u043e\u0440&gt;%ROWTYPE<\/code> \u0438 <code>WM_CONCAT<\/code>. \u041f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043b\u0435\u0436\u0438\u0442 \u0440\u0430\u0437\u0431\u043e\u0440 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u043e\u0431\u0435\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0441\u0441\u044b\u043b\u043a\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043c\u0435\u0447\u0443 <code>WM_CONCAT<\/code>: \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u044b\u0439 \u0430\u0433\u0440\u0435\u0433\u0430\u0442, \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0438 \u0443\u0431\u0440\u0430\u043d \u0441 12c, \u043d\u043e \u0432 \u043b\u0435\u0433\u0430\u0441\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e. ora2pg \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0445\u043e\u0442\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>LISTAGG<\/code> \u0442\u043e\u0442 \u0436\u0435 ora2pg \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 <code>string_agg<\/code>. \u0415\u0441\u043b\u0438 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0435, \u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u043d\u0430 <code>string_agg(col, ',' ORDER BY col)<\/code> \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443: WM_CONCAT \u0435\u0433\u043e \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b, \u0442\u0430\u043a \u0447\u0442\u043e \u00ab\u043a\u0430\u043a \u0431\u044b\u043b\u043e\u00bb \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438.<\/p>\n<h3>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0443 \u0441\u0435\u0431\u044f<\/h3>\n<p>\u042d\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443, \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0413\u0440\u0435\u0431\u0435\u043c \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c:<\/p>\n<pre><code class=\"bash\">E='--include=*.sql --include=*.pks --include=*.pkb --include=*.trg'# \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0438 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0443\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043cgrep -rilE $E \"authid[[:space:]]+(current_user|definer)\" .# \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044cgrep -rinE $E \"pragma[[:space:]]+exception_init\" .# \u0434\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0435\u0434\u0443\u0442 \u0432 1 \u0433\u043e\u0434 \u0434\u043e \u043d\u0430\u0448\u0435\u0439 \u044d\u0440\u044bgrep -rinE $E \"'[^']*(DD|MM|MON|HH)[^']*\\bRR+\\b[^']*'\" .# \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 (\u0442\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u0438\u0434 \u0441\u043a\u043e\u0431\u043e\u043a, \u0438\u0445 \u0431\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435)grep -rn $E \"q'\\[\" .# \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0430\u043d\u0443\u0442 textgrep -rinE $E \"\\blong[[:space:]]+raw\\b\" .# \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044fgrep -rin $E \"with read only\" .<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0413\u0440\u0443\u0431\u043e, \u043d\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u0438\u043a\u0438\u0434\u043a\u0438 \u0445\u0432\u0430\u0442\u0430\u0435\u0442: \u043d\u0430 \u0442\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043a\u043e\u0434\u0435, \u0447\u0442\u043e \u044f \u0433\u043e\u043d\u044f\u043b, <code>pragma exception_init<\/code> \u044d\u0442\u043e\u0442 \u0433\u0440\u0435\u043f \u043d\u0430\u0448\u0435\u043b 43 \u0440\u0430\u0437\u0430 \u043f\u0440\u043e\u0442\u0438\u0432 44 \u0443 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u0430 \u0434\u0430\u0442\u044b \u0441 <code>RR<\/code> 213 \u043f\u0440\u043e\u0442\u0438\u0432 211. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u0434\u0430\u043b, \u0443 \u0432\u0430\u0441 \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435.<\/p>\n<h3>\u0410 \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435 \u0432\u0435\u0440\u043d\u043e<\/h3>\n<p>\u0413\u0440\u0435\u043f \u0432\u044b\u0448\u0435 \u044d\u0442\u043e \u00ab\u0434\u043e\u00bb. \u041f\u0440\u043e \u00ab\u043f\u043e\u0441\u043b\u0435\u00bb \u0441\u043a\u0430\u0436\u0443 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0446\u0435\u043f\u0442\u0430 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442, \u0430 \u0432\u044b\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0445\u043e\u0447\u0443.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 <strong>\u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0445\u0435\u043c\u044b<\/strong>. \u0417\u043d\u0430\u0447\u0438\u0442 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u00ab\u0441\u0445\u0435\u043c\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a\u00bb \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u043e\u043f\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043b\u044c\u0437\u044f. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0435:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c. \u0412\u0441\u0435, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0442\u0435\u043b\u0430 (<code>GOTO<\/code>, <code>q'[...]'<\/code>, <code>%ROWTYPE<\/code> \u043e\u0442 \u043a\u0443\u0440\u0441\u043e\u0440\u0430, <code>FOLLOWS<\/code>), \u043b\u0435\u0436\u0438\u0442 \u0442\u0438\u0445\u043e \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e ora2pg \u0441\u0442\u0430\u0432\u0438\u0442 \u0432 \u0434\u0430\u043c\u043f\u0435 <code>check_function_bodies = false<\/code>. \u0425\u043e\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043c\u043e\u0443\u043a-\u0442\u0435\u0441\u0442, \u0434\u0435\u0440\u0433\u0430\u044e\u0449\u0438\u0439 \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u043b\u043e\u0432\u0438\u0442 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0446\u0435\u043b\u0438\u043a\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>\u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u043d\u0430\u043b\u0438\u0447\u0438\u0435. <code>RR<\/code>-\u0434\u0430\u0442\u044b \u0438 <code>LONG RAW<\/code> \u0434\u0430\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u0438 \u0440\u0430\u0437\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435, \u0442\u0430\u043a \u0447\u0442\u043e <code>count(*)<\/code> \u0442\u0443\u0442 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u0435\u043d, \u043d\u0443\u0436\u043d\u0430 \u0441\u0432\u0435\u0440\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u043c \u0441\u0443\u043c\u043c\u0430\u043c \u043a\u043e\u043b\u043e\u043d\u043e\u043a<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c: \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0431\u044b\u0432\u0448\u0435\u0435 <code>READ ONLY<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u0438\u043b\u043e<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u041f\u0430\u043a\u0435\u0442\u044b \u0441 <code>AUTHID<\/code> \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0437\u044b \u043d\u0435 \u0434\u043e\u0435\u0434\u0443\u0442, \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c &#8212; \u0441\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0435 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0432 PostgreSQL<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0436\u0435 \u0441\u043a\u0430\u043d\u0435\u0440\u043e\u043c: \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u043f\u0430\u043b\u043e.<\/p>\n<h3>\u0427\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e<\/h3>\n<p>\u041d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f. \u0412\u0441\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0430\u0440\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f <code>(+)<\/code>, \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>LEFT OUTER JOIN<\/code><\/p>\n<\/li>\n<li>\n<p><code>ORDER SIBLINGS BY<\/code>, \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 CTE \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c-\u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0435\u0439, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0440\u0430\u0442\u044c\u0435\u0432 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u043d\u044b\u0439 (\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0430 \u043d\u0435 \u043d\u0430 \u0433\u043b\u0430\u0437)<\/p>\n<\/li>\n<li>\n<p><code>SYS_GUID()<\/code>, \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0430\u043c\u043e<\/p>\n<\/li>\n<li>\n<p><code>NUMTODSINTERVAL<\/code> \/ <code>NUMTOYMINTERVAL<\/code>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p><code>SELECT UNIQUE<\/code> (\u043e\u0440\u0430\u043a\u043b\u043e\u0432\u044b\u0439 \u0441\u0438\u043d\u043e\u043d\u0438\u043c DISTINCT), <code>SYS_REFCURSOR<\/code>, <code>NOCOPY<\/code>, \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <code>LONG<\/code>, <code>INTERVAL YEAR TO MONTH<\/code>, <code>ENABLE ROW MOVEMENT<\/code>, <code>ROW ARCHIVAL<\/code>, <code>SCALE<\/code>\/<code>ORDER<\/code> \u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/li>\n<\/ul>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c<\/h3>\n<p>\u0421\u0442\u0435\u043d\u0434 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: ora2pg 25.0, PostgreSQL 16, \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 Oracle, \u043f\u0440\u043e\u0433\u043e\u043d, \u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u0431\u0430\u0437\u0443. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043f\u0430\u043b\u043e \u0438 \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0432 Oracle, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0438\u0434\u0435\u0442 \u0432 \u043e\u0442\u043a\u0430\u0437, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0433\u043d\u0430\u043b \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u044b \u043f\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u043a\u043e\u0434\u0443: utPLSQL, alexandria-plsql-utils, \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u044b\u0435 db-sample-schemas \u0438 Logger, 766 \u0444\u0430\u0439\u043b\u043e\u0432, 229787 \u0441\u0442\u0440\u043e\u043a. \u0412\u0441\u0435 \u043d\u0430\u0445\u043e\u0434\u043a\u0438 \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c. \u041e\u0442\u0441\u044e\u0434\u0430, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0446\u0438\u0444\u0440\u044b \u0432\u0440\u043e\u0434\u0435 \u00ab50 \u0440\u0430\u0437 \u0432 utPLSQL\u00bb \u0432\u044b\u0448\u0435, \u044d\u0442\u043e \u043d\u0435 \u043e\u0446\u0435\u043d\u043a\u0430, \u0430 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435.<\/p>\n<p>\u041e\u0442\u0442\u0443\u0434\u0430 \u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0438 \u043d\u0430\u0445\u043e\u0434\u043a\u0438, \u043d\u043e \u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u043f\u043e \u043d\u0438\u043c: \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0437\u0430\u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u043e\u043d \u043f\u043e \u043a\u043e\u0440\u043f\u0443\u0441\u0443 \u043d\u0430\u0448\u0435\u043b \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0431\u0430\u0433 \u0432 \u043c\u043e\u0435\u043c \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b\u0438. \u0410 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u043d\u0430\u0448\u043b\u0430 \u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0441 <code>RR<\/code> \u0438 <code>YY<\/code>, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0447\u0435\u043a\u043b\u0438\u0441\u0442 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u0433\u0434\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u00abRR \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 YY\u00bb, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435.<\/p>\n<h3>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/h3>\n<p>\u0413\u0440\u0435\u0431\u044b \u0432\u044b\u0448\u0435 \u043b\u043e\u0432\u044f\u0442 \u043f\u044f\u0442\u044c \u0448\u0442\u0443\u043a \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0441\u043a\u0430\u043d\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c \u0434\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0431\u0430\u0437\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e: <code>pip install ora2pg-gap-report<\/code>.<\/p>\n<p>\u041f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u043a\u0435 \u043e\u043d \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043d\u0430 \u0447\u0435\u043c \u043e\u043d\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0430 \u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0432\u0430\u043d\u0435\u0442:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ac8\/30f\/89e\/ac830f89ee7a315d46d7c910842f16d3.png\" alt=\"\u0412\u044b\u0432\u043e\u0434 --explain GAP-059\" title=\"\u0412\u044b\u0432\u043e\u0434 --explain GAP-059\" width=\"1290\" height=\"215\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ac8\/30f\/89e\/ac830f89ee7a315d46d7c910842f16d3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ac8\/30f\/89e\/ac830f89ee7a315d46d7c910842f16d3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u044b\u0432\u043e\u0434 &#8212;explain GAP-059<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: <a href=\"https:\/\/github.com\/Lunch418\/ora2pg-gap-report\" rel=\"noopener nofollow\">https:\/\/github.com\/Lunch418\/ora2pg-gap-report<\/a>, Apache 2.0. \u0422\u0430\u043c \u0436\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u044b \u043f\u043e \u0432\u0441\u0435\u043c \u043d\u0430\u0445\u043e\u0434\u043a\u0430\u043c, \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u043e\u0431\u0435\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438 \u0432\u044b \u0433\u043e\u043d\u044f\u043b\u0438 \u0435\u0435 \u0447\u0435\u0440\u0435\u0437 ora2pg, \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043a\u0435\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u043b. \u0417\u0430\u0432\u043e\u0434\u0438\u0442\u0435 issue \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c, \u044f \u043f\u0440\u043e\u0433\u043e\u043d\u044e \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0442\u0435\u043d\u0434 \u0438 \u043b\u0438\u0431\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044e, \u043b\u0438\u0431\u043e \u043d\u0430\u043f\u0438\u0448\u0443, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1076562\/\">https:\/\/habr.com\/ru\/articles\/1076562\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ora2pg \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0441\u0445\u0435\u043c\u0443 \u0441 Oracle \u043d\u0430 PostgreSQL, \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435 \u043e\u0441\u0438\u043b\u0438\u043b: \u043e\u043d \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0438 \u043d\u0435 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f, \u0430 \u043c\u043e\u043b\u0447\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e.\u0411\u0435\u0440\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443. \u0422\u0430\u043a\u0438\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u043b\u0435\u0436\u0430\u0442 \u0441\u043e\u0442\u043d\u044f\u043c\u0438:CREATE OR REPLACE PROCEDURE run_as_caller  AUTHID CURRENT_USERISBEGIN  DELETE FROM staging;END;\/\u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 ora2pg. \u0421\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:&#8212; Generated by Ora2Pg, the Oracle database Schema converter, version 25.0&#8212; Nothing found of type PROCEDURE\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0435\u0442. \u041a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u043e\u043b\u044c, \u0432 \u043b\u043e\u0433\u0435 \u043d\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u043d\u0438 \u0434\u0430\u0436\u0435 DEBUG-\u0441\u0442\u0440\u043e\u043a\u0438 unhandled line, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 CREATE CLUSTER. \u041f\u0440\u043e\u0441\u0442\u043e \u0442\u0438\u0448\u0438\u043d\u0430.\u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0435 \u0434\u0435\u0432\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442. \u0412\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0447\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c. \u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435.\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441 AUTHID\u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u0431\u044b\u043b\u0430, \u0447\u0442\u043e \u044f \u043d\u0430\u043b\u0430\u0436\u0430\u043b \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0423\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 AUTHID, \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u043c:CREATE OR REPLACE PROCEDURE run_as_callerISBEGIN  DELETE FROM staging;END;\/CREATE OR REPLACE PROCEDURE run_as_caller () AS $body$BEGIN  DELETE FROM staging;END;$body$LANGUAGE PLPGSQL;\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0448\u0442\u0430\u0442\u043d\u043e. \u0417\u043d\u0430\u0447\u0438\u0442 \u0434\u0435\u043b\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0435 \u043f\u0440\u0430\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. AUTHID DEFINER \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0442\u0430\u043a \u0436\u0435, \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b.\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f: \u0432 utPLSQL, \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f Oracle, AUTHID \u0441\u0442\u043e\u0438\u0442 \u0432 50 \u043c\u0435\u0441\u0442\u0430\u0445. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 package spec:create or replace noneditionable package ut_runner authid current_user iscreate or replace noneditionable package ut_coverage_helper authid definer is\u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043d\u0435 \u0434\u043e\u0435\u0434\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e, \u0438 \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0432\u044b \u043e\u0431 \u044d\u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u0437\u043e\u0432\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443.\u0427\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c. \u0423\u0431\u0440\u0430\u0442\u044c \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0443 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u0434\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438, \u0438\u043d\u0430\u0447\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0412 \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c: AUTHID DEFINER \u044d\u0442\u043e SECURITY DEFINER, AUTHID CURRENT_USER \u044d\u0442\u043e SECURITY INVOKER, \u0438 \u043e\u043d \u0436\u0435 \u0432 PostgreSQL \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041e\u0431\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u0430\u043d\u0430\u043b\u043e\u0433 \u043f\u0440\u044f\u043c\u043e\u0439.\u0427\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e \u043a\u0430\u043a\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u0440\u0435\u0447\u044c: \u0432\u043e\u0442 \u043e\u0434\u0438\u043d \u043f\u0430\u043a\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0442\u0438\u043f\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0436\u0438\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0412\u043e\u0441\u0435\u043c\u044c \u043d\u0430\u0445\u043e\u0434\u043e\u043a \u043d\u0430 45 \u0441\u0442\u0440\u043e\u043a:\u041d\u0430\u0445\u043e\u0434\u043a\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0440\u043e\u0432\u043d\u043e \u044d\u0442\u043e. \u041e\u0442 \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043a \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u043c, \u043e\u0431\u0449\u0435\u0435 \u0443 \u043d\u0438\u0445 \u043e\u0434\u043d\u043e: ora2pg \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0438 \u043d\u0435 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f.TO_DATE \u0441 RR \u0434\u0430\u0435\u0442 1 \u0433\u043e\u0434 \u0434\u043e \u043d\u0430\u0448\u0435\u0439 \u044d\u0440\u044bSELECT TO_DATE(&#8217;85-06-01&#8242;, &#8216;RR-MM-DD&#8217;) FROM dual;RR \u044d\u0442\u043e \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0434\u0432\u0443\u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u0433\u043e\u0434\u0430: 00-49 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u0432\u0443\u0445\u0442\u044b\u0441\u044f\u0447\u043d\u044b\u0435, 50-99 \u043a\u0430\u043a \u0442\u044b\u0441\u044f\u0447\u0430 \u0434\u0435\u0432\u044f\u0442\u044c\u0441\u043e\u0442. \u0412 Oracle \u0442\u0443\u0442 1985 \u0433\u043e\u0434.ora2pg \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0430 PostgreSQL 16:      d1       |      d2&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212; 0001-06-01 BC | 0001-06-01 BC(1 row)\u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u0442, \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0432\u0435\u0440\u043d\u0443\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. PostgreSQL \u043a\u043e\u0434\u0430 RR \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0438 \u043c\u043e\u043b\u0447\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0432\u043e\u0435.\u0412 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 Oracle (db-sample-schemas) \u0442\u0430\u043a\u0438\u0445 INSERT-\u043e\u0432 211 \u0448\u0442\u0443\u043a:INSERT INTO orders VALUES (2458,TO_TIMESTAMP(&#8217;16-AUG-07 02.34.12.234359 PM&#8217;,&#8217;DD-MON-RR HH.MI.SS.FF AM&#8217;,&#8217;NLS_DATE_LANGUAGE=American&#8217;)\u0417\u0430\u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0432\u0441\u0435, \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u0436\u0430\u043b\u043e\u0431\u044b.\u0427\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c, \u0438 \u0442\u0443\u0442 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0440\u044b\u0432 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c RR \u043d\u0430 YY, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u042f \u0442\u0430\u043a \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438. \u041f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b:SELECT to_date(&#8217;49-06-01&#8242;,&#8217;YY-MM-DD&#8217;) AS yy49,       to_date(&#8217;50-06-01&#8242;,&#8217;YY-MM-DD&#8217;) AS yy50,       to_date(&#8217;69-06-01&#8242;,&#8217;YY-MM-DD&#8217;) AS yy69,       to_date(&#8217;70-06-01&#8242;,&#8217;YY-MM-DD&#8217;) AS yy70;    yy49    |    yy50    |    yy69    |    yy70&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212; 2049-06-01 | 2050-06-01 | 2069-06-01 | 1970-06-01\u041f\u043e\u0440\u043e\u0433 \u0443 PostgreSQL 69\/70, \u0443 \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u0441\u043a\u043e\u0433\u043e RR \u043f\u043e\u0440\u043e\u0433 49\/50. \u0421\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u0430 00-49 \u0438 70-99, \u0430 \u043d\u0430 50-69 \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043d\u0430 \u0441\u0442\u043e \u043b\u0435\u0442: &#8217;65&#8217; \u0432 Oracle \u044d\u0442\u043e 1965, \u0430 \u0447\u0435\u0440\u0435\u0437 YY \u0432 PostgreSQL \u044d\u0442\u043e 2065. \u0420\u043e\u0432\u043d\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0434\u0430\u0442 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0432\u0435\u043a\u0430.\u0422\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0433\u0440\u043e\u043c\u043a\u0443\u044e \u043f\u043e\u043b\u043e\u043c\u043a\u0443 \u043d\u0430 \u0442\u0438\u0445\u0443\u044e, \u0438 \u044d\u0442\u043e \u0445\u0443\u0436\u0435. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u0437\u043d\u0430\u0447\u043d\u043e\u043c\u0443 \u0433\u043e\u0434\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c YYYY.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u043e, \u0447\u0442\u043e ora2pg \u0432\u043e\u043e\u0431\u0449\u0435-\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c RR: \u0432 TO_CHAR \u043e\u043d \u0447\u0435\u0441\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 YY. \u0410 \u0432 TO_DATE \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442. \u0427\u0438\u043d\u0438\u0442 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0435 \u043d\u0430\u0434\u043e (\u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0435 RR \u0438 YY \u0434\u0430\u044e\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435), \u0438 \u043d\u0435 \u0447\u0438\u043d\u0438\u0442 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0430\u0434\u043e.LONG RAW \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 text \u0432\u043c\u0435\u0441\u0442\u043e byteaCREATE TABLE binstuff (    id       NUMBER PRIMARY KEY,    a_raw    RAW(200),    a_long   LONG,    a_lraw   LONG RAW,    a_blob   BLOB,    a_clob   CLOB,    a_bfile  BFILE);\u0421\u0432\u0430\u043b\u0438\u043b \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u0435:CREATE TABLE binstuff (id bigint,a_raw bytea,a_long text,a_lraw text,a_blob bytea,a_clob text,a_bfile bytea) ;RAW(200), BLOB, BFILE \u0432 bytea. \u0410 LONG RAW, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439, \u0432 text.\u041f\u043e\u043b\u0435\u0437 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 ora2pg, lib\/Ora2Pg\/Oracle.pm, \u0441\u0442\u0440\u043e\u043a\u0430 45:&#8217;LONG RAW&#8217; =&gt; &#8216;bytea&#8217;,\u0418 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f DATA_TYPE. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0431\u043e\u0440 \u0438 \u043d\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441, \u0430 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439. \u041f\u043e\u0445\u043e\u0436\u0435, \u043f\u0430\u0440\u0441\u0435\u0440 DDL \u0440\u0435\u0436\u0435\u0442 \u043f\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u0443 \u0438 \u043c\u0430\u0442\u0447\u0438\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 LONG.CREATE TABLE \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0438\u0441\u0442\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u0445\u0435\u043c\u044b \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435. \u041f\u0440\u0438\u043b\u0435\u0442\u0438\u0442 \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 text \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043d\u0435 \u043b\u0435\u0437\u0443\u0442:ERROR:  invalid byte sequence for encoding &#171;UTF8&#187;: 0x00\u0427\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c. \u041f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0438\u043f \u043d\u0430 bytea \u0440\u0443\u043a\u0430\u043c\u0438. \u042d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0441\u0430\u043c ora2pg \u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u0443\u0435\u0442.\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430CREATE OR REPLACE PROCEDURE ins_one IS  dup_key EXCEPTION;  PRAGMA EXCEPTION_INIT(dup_key, -1);BEGIN  INSERT INTO uniq_t (id) VALUES (1);EXCEPTION  WHEN dup_key THEN    DBMS_OUTPUT.PUT_LINE(&#8216;handled duplicate&#8217;);END;\/ORA-00001 \u044d\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432 Oracle \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 handled duplicate. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438:CREATE OR REPLACE PROCEDURE ins_one () AS $body$BEGIN  INSERT INTO uniq_t(id) VALUES (1);EXCEPTION  WHEN SQLSTATE &#8216;50001&#8217; THEN    RAISE NOTICE &#8216;handled duplicate&#8217;;END;$body$PRAGMA \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d \u043d\u0430 SQLSTATE &#8216;50001&#8217;. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043d\u0430 -1 \u0438 \u043d\u0430 -60 (\u0432\u0437\u0430\u0438\u043c\u043e\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430), \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 50001. \u042d\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u043d\u043e\u043c\u0435\u0440 ORA \u0432 \u043d\u0435\u0435 \u043d\u0435 \u0437\u0430\u0435\u0437\u0436\u0430\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435.\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0436\u0438\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438:ERROR:  duplicate key value violates unique constraint &#171;uniq_t_pkey&#187;CONTEXT:  SQL statement &#171;INSERT INTO uniq_t(id) VALUES (1)&#187;PL\/pgSQL function ins_one() line 3 at SQL statement\u041d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043a\u043e\u0434 PostgreSQL \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 23505, \u0430 50001 \u043e\u043d \u043d\u0435 \u0432\u043e\u0437\u0431\u0443\u0436\u0434\u0430\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0442\u0430\u043b \u043c\u0435\u0440\u0442\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0438 \u043e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 Oracle \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0433\u043b\u043e\u0442\u0430\u043b\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u043b\u0435\u0442\u0438\u0442 \u043d\u0430\u0440\u0443\u0436\u0443.\u0412 utPLSQL \u0438 Logger \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 44.\u0427\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c. \u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 ORA \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c PostgreSQL \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c 50001. \u0427\u0438\u0442\u0430\u0435\u043c\u0435\u0435 \u0447\u0435\u0440\u0435\u0437 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043e\u043d\u0438 \u0436\u0435 \u0432 PL\/pgSQL \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 WHEN.\u0412\u043e\u0442 \u043a\u0430\u0440\u0442\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e. \u041f\u0440\u0430\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u044f \u0441\u043d\u044f\u043b \u0441 \u0436\u0438\u0432\u043e\u0433\u043e PostgreSQL 16, \u0432\u043e\u0437\u0431\u0443\u0436\u0434\u0430\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u044f SQLSTATE. \u041b\u0435\u0432\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430, \u043d\u043e\u043c\u0435\u0440\u0430 ORA, \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Oracle: \u0431\u0430\u0437\u044b \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0437\u0430 \u043d\u0435\u0435 \u0440\u0443\u0447\u0430\u044e\u0441\u044c \u0441\u043b\u0430\u0431\u0435\u0435.Oracle\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043eSQLSTATE\u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0432 PL\/pgSQLORA-00001\u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c23505unique_violationORA-00060\u0432\u0437\u0430\u0438\u043c\u043e\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043040P01deadlock_detectedORA-02291\u043d\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u043823503foreign_key_violationORA-02292\u0435\u0441\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u044f\u044f \u0437\u0430\u043f\u0438\u0441\u044c23503foreign_key_violationORA-01400NULL \u0432 NOT NULL \u0441\u0442\u043e\u043b\u0431\u0435\u044623502not_null_violationORA-02290\u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 CHECK23514check_violationORA-01403NO_DATA_FOUNDP0002no_data_foundORA-01422\u0432\u0435\u0440\u043d\u0443\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438P0003too_many_rowsORA-12899\u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0432\u043b\u0435\u0437\u043b\u0430 \u0432 \u0441\u0442\u043e\u043b\u0431\u0435\u044622001string_data_right_truncationORA-01438\u0447\u0438\u0441\u043b\u043e \u043d\u0435 \u0432\u043b\u0435\u0437\u043b\u043e \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c22003numeric_value_out_of_rangeORA-01476\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u043e\u043b\u044c22012division_by_zeroORA-01722\u043d\u0435 \u0447\u0438\u0441\u043b\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0436\u0434\u0430\u043b\u0438 \u0447\u0438\u0441\u043b\u043e22P02invalid_text_representation\u0418 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0442\u043e\u0438\u043b\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c: \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0435, \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u0430\u0435\u0442\u0435\u0441\u044c. ORA-02291 \u0438 ORA-02292 \u0432 Oracle \u044d\u0442\u043e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 (\u043d\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043f\u0440\u043e\u0442\u0438\u0432 \u00ab\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043c\u043e\u043a, \u043d\u0435 \u0434\u0430\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u044c\u00bb), \u0430 PostgreSQL \u043d\u0430 \u043e\u0431\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0434\u043d\u0438\u043c 23503, \u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0412 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0445\u0443\u0436\u0435: ORA-06502 (numeric or value error) \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e \u0432 22001, \u0442\u043e \u0432 22003. \u0422\u0430\u043a \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0438 \u0440\u0435\u0448\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u043e\u0432\u0438\u043b.\u0415\u0449\u0435 \u043f\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u0442\u044cFOLLOWS \u0443 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u043b\u043e\u043c\u0430\u0435\u0442 \u043d\u0435 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0430 \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443.\u0412 Oracle \u044d\u0442\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430 \u00ab\u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0439 \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u00bb. ora2pg \u0435\u0435 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442, \u0430 \u0440\u043e\u043d\u044f\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0442\u0435\u043b\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043c\u0435\u0436\u0434\u0443 AS $BODY$ \u0438 BEGIN:CREATE OR REPLACE FUNCTION trigger_fct_trg_b() RETURNS trigger AS $BODY$FOLLOWS trg_aBEGIN  NEW.audited := &#8216;Y&#8217;;RETURN NEW;END$BODY$CREATE FUNCTION \u0438 CREATE TRIGGER \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0434\u0430\u043c\u043f\u0435 ora2pg \u0441\u0442\u043e\u0438\u0442 check_function_bodies = false \u0438 \u0442\u0435\u043b\u043e \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0410 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 INSERT:ERROR:  syntax error at or near &#171;FOLLOWS&#187;LINE 2: FOLLOWS trg_a\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c \u043d\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432, \u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u042d\u0442\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: \u0434\u043e \u043f\u0440\u043e\u0434\u0430 \u0434\u043e\u0435\u0437\u0436\u0430\u0435\u0442 \u043c\u043e\u043b\u0447\u0430.\u0427\u0438\u043d\u0438\u0442\u044c: \u0432 PostgreSQL \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u00ab\u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e-\u0442\u043e\u00bb \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0438 \u0438\u0434\u0443\u0442 \u043f\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0443 \u0438\u043c\u0435\u043d. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e: t10_first \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0440\u0430\u043d\u044c\u0448\u0435 t20_second, \u0445\u043e\u0442\u044f \u0441\u043e\u0437\u0434\u0430\u043d \u0431\u044b\u043b \u043f\u043e\u0437\u0436\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0443 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c, \u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c.WITH READ ONLY \u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442 \u0431\u0435\u0441\u0441\u043b\u0435\u0434\u043d\u043e.CREATE OR REPLACE VIEW v_emp AS  SELECT emp_id, name FROM employees  WITH READ ONLY;\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435:CREATE OR REPLACE VIEW v_emp AS SELECT emp_id, name FROM employees;\u041e\u0433\u043e\u0432\u043e\u0440\u043a\u0438 \u043d\u0435\u0442. \u0418 \u0432\u043e\u0442 \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430: \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 PostgreSQL \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u043e\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442.INSERT 0 1 emp_id |               name&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-    999 | written through a READ ONLY view(1 row)\u0421\u0442\u0440\u043e\u043a\u0430 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0435\u0433\u043b\u0430 \u0432 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u0412 Oracle \u0442\u0443\u0442 \u0431\u044b\u043b\u043e \u0431\u044b ORA-42399. \u0417\u0430\u0449\u0438\u0442\u0430, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0438\u0448\u0435\u0442.\u0427\u0438\u043d\u0438\u0442\u044c: \u043f\u0440\u0430\u0432\u0430\u043c\u0438 (REVOKE INSERT, UPDATE, DELETE ON &lt;view&gt;, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u0434\u0430\u0435\u0442 permission denied for view) \u043b\u0438\u0431\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u043c INSTEAD OF, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.ROWNUM \u0432 UPDATE \u0438 DELETE.ora2pg \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-492884","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/492884","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=492884"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/492884\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=492884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=492884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=492884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}