Проблема миграции при дедупликации голосов за опросы

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

class DeleteDuplicatePollVotes < ActiveRecord::Migration[7.0]
  def up
    execute <<~SQL
      DELETE FROM poll_votes
      WHERE (poll_id, user_id, updated_at) NOT IN (
        SELECT poll_id, user_id, MAX(updated_at)
        FROM poll_votes
        GROUP BY poll_id, user_id
      )
    SQL
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

Завтра я проведу более тщательное расследование (у меня уже поздно), но так как SQL-запрос, похоже, явно предназначен для удаления всех дубликатов, хотел просто отметить это. Я подтвердил, что файл миграции есть в моём Docker-приложении, поэтому предполагаю, что он был выполнен. Буду рад услышать другие мнения по этому поводу.

ОБНОВЛЕНИЕ

Итак, я подтвердил, что множественные голоса, созданные до моего последнего обновления до версии 3.1.0.beta5, отсутствуют, что указывает на то, что именно обновление, скорее всего, стерло множественные голоса. Вы можете проверить наличие множественных голосов самостоятельно, войдя в приложение Discourse и выполнив приведённый ниже запрос.

# вход в приложение Discourse
sudo ./launcher enter app

# вход в консоль PostgreSQL
sudo -u postgres psql discourse

Запрос для получения множественных голосов, отсортированных по дате создания:

SELECT poll_id, user_id, created_at
FROM poll_votes
WHERE (poll_id, user_id, created_at) NOT IN (
  SELECT poll_id, user_id, MAX(created_at)
  FROM poll_votes
  GROUP BY poll_id, user_id
)
ORDER BY created_at;

Вы увидите, что самая старая запись created_at появилась после последнего обновления.

Кстати — не должно ли у меня быть этого файла миграции?

Я немного запутался, как у меня оказался этот файл миграции… Похоже, он был добавлен после версии beta5? Как он мог оказаться у меня?

Я подтвердил выполнение миграции, проверив таблицу schema_migrations_details в PostgreSQL:

SELECT name, created_at 
FROM schema_migration_details 
WHERE name = 'DeleteDuplicatePollVotes';

В заключение, я уверен, что здесь есть ошибка, и нам следует удалить этот файл миграции до того, как другие пользователи обновятся. Я не очень опытен в Rails или Discourse, поэтому не уверен, как решить эту проблему или можно ли восстановить утраченные голоса, но это стало неприятным сюрпризом для наших пользователей, потерявших свои голоса.

4 лайка

Привет @sweetbeems, спасибо за твой отчёт.

Действительно, с этой миграцией возникла серьёзная проблема. Исправление только что слито, и, как ты и сказал, некоторые данные могли быть удалены. :face_exhaling: Я написал эту миграцию и должен признать, что совсем не учёл Post.where(type: "multiple") (в основном, опросы, допускающие несколько голосов).

Я пытаюсь понять, можно ли создать rake-задачу или скрипт, которые помогут пользователям восстановить потерянные голоса за опросы из резервной копии.

6 лайков

Огромное спасибо, @nat!

Если ты напишешь этот скрипт для Rake, это точно обрадует многих пользователей на моём сайте. Я бы сказал, что почти все наши опросы позволяют голосовать несколько раз, так что результаты прошлых опросов уже полностью изменились :sweat_smile:.

3 лайка

Привет, @nat — просто интересно, планируешь ли ты когда-нибудь создать backfill? Или это пока не входит в планы? Спасибо.

1 лайк

@sweetbeems вот предварительный набор команд, который должен помочь восстановить ваши данные; я уже опробовал их на своём сайте.

Я исхожу из предположения, что вы используете нашу установку через Docker и в некоторой степени знакомы с командной строкой.

Вам нужно найти файл резервной копии в <site>/admin/backups. Это должен быть файл, созданный до удаления данных.

Это руководство предполагает, что ваши резервные копии включают загрузки. Разница заключается в том, что файл резервной копии будет иметь расширение .tar.gz (данные + загрузки) вместо .sql.gz (только данные).

# войдите в приложение от имени пользователя по умолчанию
docker exec -it app bash

# проверьте наличие нужной резервной копии
ls /var/www/discourse/public/backups/default/

# извлеките файл dump.sql из сжатой резервной копии
cd /var/www/discourse/public/backups
mkdir site-backup-to-restore
tar xfz ./default/=SITE_BACKUP_FILENAME= -C site-backup-to-restore/
cd site-backup-to-restore
gunzip dump.sql.gz

# извлеките данные
# это находит начало данных голосов за опросы
# и конец данных (который представляет собой пустую строку)
start=$(grep -n "COPY public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at) FROM stdin;" dump.sql | sed  's/\([0-9]*\).*/\1/')
end=$(tail -n +$start dump.sql | grep -m 1 -n ^$ | sed  's/\([0-9]*\).*/\1/')
end=$((end-2))
tail -n +$start dump.sql | head -n $end > poll_votes_dump.sql

# здесь вы должны визуально проверить poll_votes_dump.sql
cat poll_votes_dump.sql

# измените COPY на INSERT, чтобы
# мы могли добавить ON CONFLICT
sed -i 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{6\}/'\''&'\''/g' poll_votes_dump.sql
sed -i '2,$s/\t/,/g' poll_votes_dump.sql
sed -i '2,$s/^/(/; 2,$s/$/),/' poll_votes_dump.sql
sed -i '$ s/,$//' poll_votes_dump.sql
sed -i 's/COPY public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at) FROM stdin;/INSERT INTO public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at)\nVALUES/' poll_votes_dump.sql
echo "ON CONFLICT DO NOTHING;" >> poll_votes_dump.sql
cat poll_votes_dump.sql
Вот как должны выглядеть результаты команд `cat`

Первый результат должен выглядеть так

COPY public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at) FROM stdin;
1       1       1       2023-07-04 05:49:17.031031      2023-07-04 05:49:17.031031
1       4       1       2023-07-04 05:54:01.281801      2023-07-04 05:54:01.281801

а второй — так

INSERT INTO public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at)
VALUES
(1,1,1,'2023-07-04 05:49:17.031031','2023-07-04 05:49:17.031031'),
(1,4,1,'2023-07-04 05:54:01.281801','2023-07-04 05:54:01.281801')
ON CONFLICT DO NOTHING;

Выйдите из экземпляра Docker и войдите под пользователем postgres — здесь есть более глубокая проблема, которую я не буду рассматривать здесь, но для её решения требуется выполнить дополнительные действия

# с вашего хоста получите доступ к приложению от имени пользователя postgres
docker exec --user postgres -it app bash

# выполните вставку
psql -U postgres -d discourse -f /var/www/discourse/public/backups/site-backup-to-restore/poll_votes_dump.sql

# вы должны увидеть `INSERT 0 3928` или количество восстановленных голосов за опросы
4 лайка

Привет @nat! Только что осознал, что не обновил тебя. Я провёл миграцию по твоему плану, и всё прошло отлично, спасибо!! Очень благодарен :slight_smile:

Единственная проблема, с которой я столкнулся, — это этап преобразования дампа в оператор INSERT. По какой-то причине несколько строк не получили кавычки (') вокруг дат. Думаю, в твоих командах sed была небольшая ошибка, но мои знания sed… очень ограничены.

В любом случае, я быстро исправил их вручную, и всё сработало безупречно!

2 лайка

Спасибо за обновление, рад, что всё получилось.

Ох.. извините за это. Как вы понимаете, у меня было всего несколько строк с датами, и честно говоря, я не уверен, почему форматы дат различаются в разных записях. :thinking:

Есть ли шанс, что вы ещё помните, какие именно это были даты? (Если нет, то ничего страшного)

3 лайка

Итак, посмотрев на это ещё раз, я думаю, что дело в том, что вы предположили, будто количество знаков после запятой в секундах будет равно 6. Вот все мои некорректные данные, и похоже, что во всех них меньше 6 знаков после запятой:

Некорректные строки
INSERT INTO public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at)
VALUES
(110,501,54,2023-01-17 08:07:13.09231,2023-01-17 08:07:13.09231),
(8,24,502,2022-06-23 19:09:54.01825,2022-06-23 19:09:54.01825),
(15,40,30,2022-06-24 03:38:58.16703,2022-06-24 03:38:58.16703),
(15,40,222,2022-06-24 21:11:39.76273,2022-06-24 21:11:39.76273),
(15,39,411,2022-06-26 21:32:31.26611,2022-06-26 21:32:31.26611),
(19,49,58,2022-06-27 01:44:29.70736,2022-06-27 01:44:29.70736),
(15,39,241,2022-07-01 14:27:59.6967,2022-07-01 14:27:59.6967),
(32,74,49,2022-07-09 17:29:10.65377,2022-07-09 17:29:10.65377),
(32,74,82,2022-07-09 19:14:00.5514,2022-07-09 19:14:00.5514),
(32,75,11,2022-07-09 22:41:14.95369,2022-07-09 22:41:14.95369),
(35,87,43,2022-07-13 00:29:29.70338,2022-07-13 00:29:29.70338),
(35,87,9,2022-07-13 01:09:07.43221,2022-07-13 01:09:07.43221),
(35,85,37,2022-07-13 04:47:24.1375,2022-07-13 04:47:24.1375),
(35,88,127,2022-07-13 21:50:52.19039,2022-07-13 21:50:52.19039),
(37,91,18,2022-07-17 13:38:45.12448,2022-07-17 13:38:45.12448),
(39,120,30,2022-07-21 05:16:23.22116,2022-07-21 05:16:23.22116),
(39,122,82,2022-07-21 11:27:14.96521,2022-07-21 11:27:14.96521),
(39,112,54,2022-07-21 15:57:17.56429,2022-07-21 15:57:17.56429),
(39,116,14,2022-07-21 18:45:04.31259,2022-07-21 18:45:04.31259),
(39,127,14,2022-07-21 18:45:04.31369,2022-07-21 18:45:04.31369),
(39,122,125,2022-07-21 23:50:35.2962,2022-07-21 23:50:35.2962),
(39,116,771,2022-07-22 07:12:12.63778,2022-07-22 07:12:12.63778),
(39,130,494,2022-07-26 09:27:45.32077,2022-07-26 09:27:45.32077),
(39,124,62,2022-07-26 12:30:12.46385,2022-07-26 12:30:12.46385),
(45,155,67,2022-08-04 08:41:49.96341,2022-08-04 08:41:49.96341),
(46,161,82,2022-08-05 11:47:12.31443,2022-08-05 11:47:12.31443),
(46,161,35,2022-08-06 13:18:00.99911,2022-08-06 13:18:00.99911),
(48,164,54,2022-08-08 21:56:14.14143,2022-08-08 21:56:14.14143),
(47,163,54,2022-08-08 21:57:04.54601,2022-08-08 21:57:04.54601),
(49,166,82,2022-08-13 00:30:34.97762,2022-08-13 00:30:34.97762),
(49,167,51,2022-08-14 05:22:23.57594,2022-08-14 05:22:23.57594),
(49,167,14,2022-08-14 07:35:27.97993,2022-08-14 07:35:27.97993),
(49,166,75,2022-08-19 22:19:38.2656,2022-08-19 22:19:38.2656),
(51,173,76,2022-08-22 17:54:17.34982,2022-08-22 17:54:17.34982),
(52,181,54,2022-08-23 15:37:38.47042,2022-08-23 15:37:38.47042),
(51,174,30,2022-08-28 03:02:15.34373,2022-08-28 03:02:15.34373),
(53,182,577,2022-08-29 10:02:30.50115,2022-08-29 10:02:30.50115),
(57,208,8,2022-09-02 20:29:40.12981,2022-09-02 20:29:40.12981),
(57,209,9,2022-09-03 02:50:22.35697,2022-09-03 02:50:22.35697),
(60,217,8,2022-09-04 13:02:46.92852,2022-09-04 13:02:46.92852),
(60,216,577,2022-09-04 13:34:07.45246,2022-09-04 13:34:07.45246),
(60,217,105,2022-09-04 22:49:24.39502,2022-09-04 22:49:24.39502),
(60,216,411,2022-09-04 22:53:34.70586,2022-09-04 22:53:34.70586),
(61,219,30,2022-09-07 05:05:01.82435,2022-09-07 05:05:01.82435),
(61,223,18,2022-09-09 11:44:43.2807,2022-09-09 11:44:43.2807),
(60,216,1033,2022-09-15 13:37:12.0177,2022-09-15 13:37:12.0177),
(60,216,959,2022-09-15 18:52:10.34721,2022-09-15 18:52:10.34721),
(66,240,411,2022-09-17 22:19:12.0275,2022-09-17 22:19:12.0275),
(66,240,37,2022-09-19 09:33:41.28032,2022-09-19 09:33:41.28032),
(67,249,9,2022-09-19 12:21:47.25329,2022-09-19 12:21:47.25329),
(67,247,37,2022-09-20 12:52:21.50543,2022-09-20 12:52:21.50543),
(68,250,54,2022-09-20 15:01:45.95643,2022-09-20 15:01:45.95643),
(68,251,577,2022-09-21 10:40:56.42414,2022-09-21 10:40:56.42414),
(61,220,5,2022-09-22 01:08:33.95198,2022-09-22 01:08:33.95198),
(69,257,92,2022-09-26 05:18:16.92423,2022-09-26 05:18:16.92423),
(70,267,54,2022-09-26 09:08:28.10639,2022-09-26 09:08:28.10639),
(71,268,9,2022-09-28 03:18:03.1252,2022-09-28 03:18:03.1252),
(69,257,30,2022-09-28 04:43:16.49851,2022-09-28 04:43:16.49851),
(72,273,30,2022-10-05 20:56:44.74037,2022-10-05 20:56:44.74037),
(73,283,104,2022-10-10 07:54:50.91248,2022-10-10 07:54:50.91248),
(73,278,54,2022-10-10 08:51:23.83813,2022-10-10 08:51:23.83813),
(73,292,82,2022-10-10 12:19:52.31188,2022-10-10 12:19:52.31188),
(73,279,351,2022-10-10 13:18:39.72019,2022-10-10 13:18:39.72019),
(73,288,661,2022-10-10 16:38:10.11372,2022-10-10 16:38:10.11372),
(73,289,661,2022-10-10 16:38:10.11469,2022-10-10 16:38:10.11469),
(73,279,127,2022-10-12 11:00:33.12802,2022-10-12 11:00:33.12802),
(75,301,82,2022-10-12 19:03:33.58176,2022-10-12 19:03:33.58176),
(75,302,104,2022-10-12 19:57:29.9634,2022-10-12 19:57:29.9634),
(76,306,82,2022-10-15 13:10:32.84764,2022-10-15 13:10:32.84764),
(73,285,125,2022-10-16 19:52:57.65115,2022-10-16 19:52:57.65115),
(77,308,30,2022-10-16 20:48:14.6183,2022-10-16 20:48:14.6183),
(77,308,18,2022-10-16 23:04:30.89369,2022-10-16 23:04:30.89369),
(79,313,92,2022-10-19 05:17:21.06009,2022-10-19 05:17:21.06009),
(60,217,425,2022-10-19 10:52:06.17367,2022-10-19 10:52:06.17367),
(60,216,1358,2022-10-20 14:50:25.09089,2022-10-20 14:50:25.09089),
(60,216,1363,2022-10-21 07:47:08.79396,2022-10-21 07:47:08.79396),
(84,329,43,2022-10-30 16:01:20.68959,2022-10-30 16:01:20.68959),
(84,329,18,2022-10-30 16:30:59.49903,2022-10-30 16:30:59.49903),
(85,340,51,2022-10-30 21:40:28.30536,2022-10-30 21:40:28.30536),
(84,328,51,2022-10-30 23:17:48.62015,2022-10-30 23:17:48.62015),
(84,330,127,2022-10-31 00:03:10.54385,2022-10-31 00:03:10.54385),
(86,343,928,2022-10-31 08:32:06.81807,2022-10-31 08:32:06.81807),
(86,343,384,2022-10-31 10:59:18.72836,2022-10-31 10:59:18.72836),
(87,346,928,2022-11-07 13:47:25.68637,2022-11-07 13:47:25.68637),
(88,349,92,2022-11-07 14:38:15.06785,2022-11-07 14:38:15.06785),
(88,351,928,2022-11-08 15:26:06.92257,2022-11-08 15:26:06.92257),
(89,354,75,2022-11-09 20:57:46.85531,2022-11-09 20:57:46.85531),
(93,371,76,2022-11-21 09:43:29.16922,2022-11-21 09:43:29.16922),
(93,370,543,2022-11-21 21:23:21.04009,2022-11-21 21:23:21.04009),
(94,373,948,2022-11-28 18:11:42.61035,2022-11-28 18:11:42.61035),
(94,373,54,2022-11-29 07:15:21.09078,2022-11-29 07:15:21.09078),
(97,394,82,2022-12-12 13:46:46.06457,2022-12-12 13:46:46.06457),
(84,330,772,2022-12-13 03:04:26.20321,2022-12-13 03:04:26.20321),
(98,397,661,2022-12-15 19:37:02.36834,2022-12-15 19:37:02.36834),
(98,397,127,2022-12-16 00:59:19.5534,2022-12-16 00:59:19.5534),
(98,398,76,2022-12-16 12:46:17.11838,2022-12-16 12:46:17.11838),
(97,394,928,2022-12-18 13:38:01.11894,2022-12-18 13:38:01.11894),
(99,400,661,2022-12-19 18:15:35.83366,2022-12-19 18:15:35.83366),
(100,436,8,2022-12-21 12:42:55.98193,2022-12-21 12:42:55.98193),
(100,437,30,2022-12-21 14:32:21.01328,2022-12-21 14:32:21.01328),
(101,442,127,2022-12-22 12:34:49.31806,2022-12-22 12:34:49.31806),
(101,443,9,2022-12-22 23:24:09.08744,2022-12-22 23:24:09.08744),
(102,453,92,2022-12-25 08:42:02.29173,2022-12-25 08:42:02.29173),
(102,454,75,2022-12-25 09:25:48.1103,2022-12-25 09:25:48.1103),
(102,453,54,2022-12-25 16:23:26.87095,2022-12-25 16:23:26.87095),
(102,451,82,2022-12-25 23:27:21.92964,2022-12-25 23:27:21.92964),
(103,458,661,2022-12-26 19:45:24.7954,2022-12-26 19:45:24.7954),
(106,469,30,2023-01-05 06:16:00.67561,2023-01-05 06:16:00.67561),
(106,470,76,2023-01-05 08:38:41.19777,2023-01-05 08:38:41.19777),
(96,392,52,2023-01-07 19:58:12.33829,2023-01-07 19:58:12.33829),
(107,478,92,2023-01-09 06:10:43.89593,2023-01-09 06:10:43.89593),
(107,488,948,2023-01-09 06:23:32.7513,2023-01-09 06:23:32.7513),
(107,479,76,2023-01-09 17:36:25.65736,2023-01-09 17:36:25.65736),
(108,496,54,2023-01-11 07:09:43.02946,2023-01-11 07:09:43.02946),
(102,455,20,2023-01-11 14:00:02.7016,2023-01-11 14:00:02.7016),
(108,495,661,2023-01-11 17:19:29.8957,2023-01-11 17:19:29.8957),
(110,501,82,2023-01-16 12:51:31.18923,2023-01-16 12:51:31.18923),
(109,498,5,2023-01-22 12:03:35.72396,2023-01-22 12:03:35.72396),
(116,513,76,2023-02-05 18:43:35.82283,2023-02-05 18:43:35.82283),
(121,532,5,2023-02-10 21:33:16.29764,2023-02-10 21:33:16.29764),
(121,536,5,2023-02-10 21:33:16.29857,2023-02-10 21:33:16.29857),
(121,532,30,2023-02-10 23:35:15.57073,2023-02-10 23:35:15.57073),
(117,516,82,2023-02-13 13:02:36.44077,2023-02-13 13:02:36.44077),
(121,533,1782,2023-02-15 07:30:42.40247,2023-02-15 07:30:42.40247),
(121,531,956,2023-02-17 03:12:52.07589,2023-02-17 03:12:52.07589),
(123,543,9,2023-02-20 15:18:28.30422,2023-02-20 15:18:28.30422),
(124,544,928,2023-02-21 22:29:58.14729,2023-02-21 22:29:58.14729),
(124,545,51,2023-02-21 23:45:29.49985,2023-02-21 23:45:29.49985),
(124,544,1,2023-02-22 00:54:54.75649,2023-02-22 00:54:54.75649),
(125,546,30,2023-02-27 04:49:40.45303,2023-02-27 04:49:40.45303),
(130,561,9,2023-03-14 09:07:21.00302,2023-03-14 09:07:21.00302),
(60,215,1759,2023-03-16 22:20:35.63149,2023-03-16 22:20:35.63149),
(60,217,2332,2023-03-20 00:55:01.75396,2023-03-20 00:55:01.75396),
(133,574,76,2023-04-03 14:14:13.00556,2023-04-03 14:14:13.00556),
(133,581,76,2023-04-03 14:14:13.00753,2023-04-03 14:14:13.00753),
(133,583,771,2023-04-06 11:26:29.85958,2023-04-06 11:26:29.85958),
(84,329,832,2023-04-06 15:37:15.71112,2023-04-06 15:37:15.71112),
(133,570,82,2023-04-06 17:01:40.21826,2023-04-06 17:01:40.21826),
(133,580,82,2023-04-06 17:01:40.22184,2023-04-06 17:01:40.22184),
(84,328,2415,2023-04-07 12:28:24.26717,2023-04-07 12:28:24.26717),
(136,593,928,2023-04-11 08:29:03.77339,2023-04-11 08:29:03.77339),
(137,598,8,2023-04-12 03:54:33.94742,2023-04-12 03:54:33.94742),
(138,601,30,2023-04-13 10:59:08.41804,2023-04-13 10:59:08.41804),
(134,588,54,2023-04-14 10:07:28.10895,2023-04-14 10:07:28.10895),
(135,589,494,2023-04-23 21:08:22.70938,2023-04-23 21:08:22.70938),
(141,614,1757,2023-04-24 12:12:58.19186,2023-04-24 12:12:58.19186),
(141,614,82,2023-04-24 13:27:17.76336,2023-04-24 13:27:17.76336),
(141,614,2395,2023-04-25 09:19:07.9266,2023-04-25 09:19:07.9266),
(141,615,494,2023-04-26 17:53:36.20522,2023-04-26 17:53:36.20522),
(141,615,76,2023-04-27 19:10:23.49874,2023-04-27 19:10:23.49874),
(142,619,51,2023-04-28 18:13:23.2794,2023-04-28 18:13:23.2794),
(142,619,8,2023-04-28 21:12:53.00285,2023-04-28 21:12:53.00285),
(142,618,2623,2023-04-30 12:09:22.47944,2023-04-30 12:09:22.47944),
(147,635,9,2023-05-08 08:06:15.48853,2023-05-08 08:06:15.48853),
(147,636,9,2023-05-08 08:06:15.48992,2023-05-08 08:06:15.48992),
(147,637,1290,2023-05-08 16:43:14.40516,2023-05-08 16:43:14.40516),
(148,638,2101,2023-05-15 08:09:10.41929,2023-05-15 08:09:10.41929),
(149,640,30,2023-05-15 12:53:54.59127,2023-05-15 12:53:54.59127),
(150,643,2623,2023-05-19 14:21:09.25022,2023-05-19 14:21:09.25022),
(153,651,928,2023-05-23 11:56:16.18164,2023-05-23 11:56:16.18164),
(155,657,82,2023-05-31 11:51:49.55158,2023-05-31 11:51:49.55158),
(154,654,36,2023-05-31 19:05:22.05666,2023-05-31 19:05:22.05666),
(155,657,931,2023-06-01 16:57:01.61211,2023-06-01 16:57:01.61211),
(154,653,2536,2023-06-02 09:31:40.07913,2023-06-02 09:31:40.07913),
(153,651,75,2023-06-03 13:13:34.4858,2023-06-03 13:13:34.4858),
(157,664,82,2023-06-04 00:23:04.28684,2023-06-04 00:23:04.28684),
(157,662,9,2023-06-04 00:52:21.13032,2023-06-04 00:52:21.13032),
(156,660,9,2023-06-04 00:52:32.24659,2023-06-04 00:52:32.24659),
(157,663,931,2023-06-04 03:13:55.87343,2023-06-04 03:13:55.87343),
(157,662,2536,2023-06-04 07:42:58.20324,2023-06-04 07:42:58.20324),
(157,662,1514,2023-06-05 20:45:21.96931,2023-06-05 20:45:21.96931),
(159,673,51,2023-06-07 17:14:47.03704,2023-06-07 17:14:47.03704),
(160,676,82,2023-06-07 17:47:04.90143,2023-06-07 17:47:04.90143),
(160,674,30,2023-06-07 18:26:46.82036,2023-06-07 18:26:46.82036),
(162,690,82,2023-06-09 21:32:10.10917,2023-06-09 21:32:10.10917),
(163,694,82,2023-06-09 21:32:30.15343,2023-06-09 21:32:30.15343),
(163,692,1514,2023-06-09 22:17:04.06222,2023-06-09 22:17:04.06222),
(162,685,67,2023-06-10 06:24:28.56428,2023-06-10 06:24:28.56428),
(162,688,2536,2023-06-10 08:46:32.26975,2023-06-10 08:46:32.26975),
(163,693,771,2023-06-10 14:16:21.58241,2023-06-10 14:16:21.58241),
(157,663,771,2023-06-10 14:17:37.84028,2023-06-10 14:17:37.84028),
(157,661,526,2023-06-10 18:47:07.09595,2023-06-10 18:47:07.09595),
(162,685,577,2023-06-11 08:20:02.62867,2023-06-11 08:20:02.62867),
(142,618,1308,2023-06-12 01:47:34.17946,2023-06-12 01:47:34.17946),
(166,702,30,2023-06-12 04:20:36.18735,2023-06-12 04:20:36.18735),
(164,695,54,2023-06-12 06:46:15.29079,2023-06-12 06:46:15.29079),
(167,705,316,2023-06-12 16:39:06.99862,2023-06-12 16:39:06.99862),
(167,705,76,2023-06-12 16:50:50.58035,2023-06-12 16:50:50.58035),
(163,692,35,2023-06-12 20:37:07.78765,2023-06-12 20:37:07.78765),
(170,714,30,2023-06-13 17:21:27.74588,2023-06-13 17:21:27.74588),
(169,713,127,2023-06-14 02:56:03.56288,2023-06-14 02:56:03.56288),
(162,689,661,2023-06-15 22:38:21.78981,2023-06-15 22:38:21.78981),
(172,721,54,2023-06-16 13:32:07.49379,2023-06-16 13:32:07.49379),
(173,725,67,2023-06-16 16:22:05.15942,2023-06-16 16:22:05.15942),
(172,721,771,2023-06-16 21:59:16.12283,2023-06-16 21:59:16.12283),
ON CONFLICT DO NOTHING;
2 лайка

Эта тема была автоматически закрыта через 4 дня. Новые ответы больше не принимаются.