postgres дамп, показывающий дубликат FUNCTION - PullRequest
0 голосов
/ 22 апреля 2020

Моя postgres версия 9.0.4 Я создал дамп postgres своей базы данных и содержит дубликаты записей пользовательских FUNCTIONS. Когда я напрямую запрашиваю свою базу данных, я не вижу ни одной записи дубликатов, но в дампе есть эти дубликаты .

Ниже приведен список, который я взял с помощью команды pg_restore -l.

37; 1255 16402 FUNCTION public sql_dirdepth(character varying) nidhin
31; 1255 16402 FUNCTION public sql_dirdepth(character varying) nidhin
29; 1255 16403 FUNCTION public sql_getdir(character varying) nidhin
35; 1255 16403 FUNCTION public sql_getdir(character varying) nidhin
30; 1255 16404 FUNCTION public sql_subdir(character varying, integer, integer) nidhin
36; 1255 16404 FUNCTION public sql_subdir(character varying, integer, integer) nidhin
32; 1255 16405 FUNCTION public unnest(anyarray) nidhin
38; 1255 16405 FUNCTION public unnest(anyarray) nidhin

Я проверил функции внутри БД и не вижу там повторяющихся записей.

CDB=# \df
                                      List of functions
 Schema |      Name       | Result data type  |         Argument data types         |  Type
--------+-----------------+-------------------+-------------------------------------+--------
 public | sql_dirdepth | integer           | character varying                   | normal
 public | sql_getdir   | character varying | character varying                   | normal
 public | sql_subdir   | character varying | character varying, integer, integer | normal
(3 rows)

Так что мне интересно, как pg_dump создал дубликаты записей этих функций в моем файле дампа.

Запрос

SELECT * 
FROM pg_proc 
WHERE proname || '' IN ('unnest', 'sql_dirdepth', 'sql_getdir', 'sql_subdir');  

дает следующий результат.

Я вижу в нем дубликаты. Как удалить дубликаты функций?

|   proname    | pronamespace | proowner | prolang | procost | prorows | provariadic | proisagg | proiswindow | prosecdef | proisstrict | proretset | provolatile | pronargs | pronargdefaults | prorettype | proargtypes | proallargtypes | proargmodes | proargnames | proargdefaults |                                    prosrc                                    |         probin          | proconfig | proacl |
|--------------|--------------|----------|---------|---------|---------|-------------|----------|-------------|-----------|-------------|-----------|-------------|----------|-----------------|------------|-------------|----------------|-------------|-------------|----------------|------------------------------------------------------------------------------|-------------------------|-----------|--------|
| unnest       |           11 |       10 |      12 |       1 |     100 |           0 | f        | f           | f         | t           | t         | i           |        1 |               0 |       2283 |        2277 |                |             |             |                | array_unnest                                                                 |                         |           |        |
| sql_getdir   |         2200 |       10 |      13 |       1 |       0 |           0 | f        | f           | f         | t           | f         | i           |        1 |               0 |       1043 |        1043 |                |             |             |                | sql_getdir                                                                   | /opt/openkaz/lib/kazsql |           |        |
| sql_subdir   |         2200 |       10 |      13 |       1 |       0 |           0 | f        | f           | f         | t           | f         | i           |        3 |               0 |       1043 |  1043 23 23 |                |             |             |                | sql_subdir                                                                   | /opt/openkaz/lib/kazsql |           |        |
| sql_dirdepth |         2200 |       10 |      13 |       1 |       0 |           0 | f        | f           | f         | t           | f         | i           |        1 |               0 |         23 |        1043 |                |             |             |                | sql_dirdepth                                                                 | /opt/openkaz/lib/kazsql |           |        |
| unnest       |         2200 |       10 |      14 |     100 |    1000 |           0 | f        | f           | f         | f           | t         | i           |        1 |               0 |       2283 |        2277 |                |             |             |                | "select $1[i] from generate_series(array_lower($1,1), array_upper($1,1)) i;" |                         |           |        |
| sql_subdir   |         2200 |       10 |      13 |       1 |       0 |           0 | f        | f           | f         | t           | f         | i           |        3 |               0 |       1043 |  1043 23 23 |                |             |             |                | sql_subdir                                                                   | /opt/openkaz/lib/kazsql |           |        |
| sql_dirdepth |         2200 |       10 |      13 |       1 |       0 |           0 | f        | f           | f         | t           | f         | i           |        1 |               0 |         23 |        1043 |                |             |             |                | sql_dirdepth                                                                 | /opt/openkaz/lib/kazsql |           |        |
| unnest       |         2200 |       10 |      14 |     100 |    1000 |           0 | f        | f           | f         | f           | t         | i           |        1 |               0 |       2283 |        2277 |                |             |             |                | "select $1[i] from generate_series(array_lower($1,1), array_upper($1,1)) i;" |                         |           |        |
| sql_getdir   |         2200 |       10 |      13 |       1 |       0 |           0 | f        | f           | f         | t           | f         | i           |        1 |               0 |       1043 |        1043 |                |             |             |                | sql_getdir                                                                   | /opt/openkaz/lib/kazsql |           |        |

1 Ответ

0 голосов
/ 23 апреля 2020

Это повреждение данных каталога, поскольку в каталоге pg_proc фактически есть повторяющиеся записи, хотя существует уникальный индекс, который гарантирует уникальность комбинации имени схемы, имени функции и списка аргументов.

Вы должны выполнить немедленное отключение (cra sh базы данных) и сделать физическое резервное копирование каталога данных. Это всегда первый шаг при работе с повреждением данных.

После перезапуска базы данных возьмите текстовый режим pg_dumpall кластера и вручную удалите дублирующиеся записи из файла дампа. Восстановите дамп в новый кластер и удалите старый.

Как только вы успешно избавитесь от повреждения данных, вы должны немедленно обновить его до PostgreSQL v12 на новом оборудовании , потому что старая версия 9.0 содержит много известных ошибок, которые могут привести к всевозможным повреждениям данных.

Это яркий пример того, почему ИТ-отделы не просто придумали обновление, чтобы держать себя в работе и раздражать конец. пользователи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...