Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,211

Как синхронизировать таблицы?

22.01.2024, 17:58. Показов 805. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Во время смены данные записываются в основную таблицу. При сдаче смены все эти данные должны быть записаны в резервную таблицу.
При сдаче смены я делаю так:
- удаляю резервную таблицу;
- вновь создаю резервную таблицу.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Резервное копирование таблицы.
procedure TDataModule2.ReservCopyTab();
begin
  if not DataModule2.PQConnection1.Connected then begin
    SQLQuery1.Active:=false;
    SQLQuery1.SQL.Clear;
    SQLQuery1.SQL.Add('DROP TABLE IF EXISTS '+INI.Tab+'r'); // Удалить таблицу.
    try
      if SQLTransaction1.Active then
            SQLTransaction1.EndTransaction;
      SQLTransaction1.Options:=[stoExplicitStart]; 
      SQLTransaction1.StartTransaction; 
      SQLQuery1.ExecSQL; 
      SQLQuery1.Active:=false;
      SQLQuery1.SQL.Clear;
      SQLQuery1.SQL.Add('CREATE TABLE '+INI.Tab+'r'+
      ' AS (SELECT * FROM '+INI.Tab+')'); // Создать резервную таблицу.
      SQLQuery1.ExecSQL;
      SQLTransaction1.Commit;
      SQLTransaction1.Options:=[];
      SQLQuery1.Close;
    except
      exit;
    end;
  end;
end;
(INI.Tab - строка с именем основной таблицы, INI.Tab+'r' - имя резервной таблицы.)
Оно, конечно, так работает, но получается как-то не очень "гут"..., особенно если таблица будет содержать записи за несколько лет.
Есть ли какой-то другой способ в конце смены записывать в резервную таблицу только отсутствующие в ней данные?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.01.2024, 17:58
Ответы с готовыми решениями:

Как синхронизировать 2 DBLookupCombobox?
Доброго, времени суток. Может кто сталкивался - когда нужно чтобы два списка DbLookupCombobox на форме, данные отображали синхронно...

Как синхронизировать пользователей?
Заходит первый пользователь ему присваивается id рандомный он записывается в базу данных,пользователь может нажимать на кнопку менять...

Как синхронизировать потоки?
Разбираюсь с legacy-кодом. Наткнулся на такой фрагмент в фоновом потоке: private void loadAddresses() throws URISyntaxException,...

8
Native x86
Эксперт Hardware
 Аватар для quwy
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
22.01.2024, 18:06
Делайте обычный инсерт из селеста, где во where ставите условие "сегодняшний день".

SQL
1
2
3
INSERT INTO tab_2
SELECT * FROM tab_1
WHERE DATE = <сегодня>;
1
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
22.01.2024, 18:08
а какой тайный смысл в самом существовании резервной таблицы? если база умрет, то резервной таблице тоже каюк.
что касается исключения - почему молча, юзер сам должен догадаться что ошибка возникла?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
22.01.2024, 18:09
А еще инсерт можно дополнить ON CONFLICT DO NOTHING, чтобы избежать случайного дублирования.
1
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,211
23.01.2024, 11:16  [ТС]
Делаю, как посоветовали, но почему-то возникает ошибка, даже если отключаю "ON CONFLICT DO NOTHING".
Delphi
1
2
3
4
5
      SQLQuery1.SQL.Add('INSERT INTO '+INI.Tab+'r'+
      ' SELECT * FROM '+INI.Tab+
  //    ' ON CONFLICT DO NOTHING '+
      ' WHERE nU>='+S+' OR nU=0');
      SQLQuery1.ExecSQL;
nU - столбцы убытия, имеют тип "numeric".
Не могу найти ошибку.
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
23.01.2024, 11:36
LINE 2
а в строке 1 что?

ну интересно сильно - зачем резервная таблица? скажи, не скромничай )
1
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,211
23.01.2024, 11:50  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    SQLQuery1.Active:=false; // Удалить все прибывшие автомобили.
    SQLQuery1.SQL.Clear;
    SQLQuery1.SQL.Add('DELETE FROM '+INI.Tab+'r WHERE nU=0');
    try
      if SQLTransaction1.Active then
        SQLTransaction1.EndTransaction;
      SQLTransaction1.Options:=[stoExplicitStart];
      SQLTransaction1.StartTransaction;
      SQLQuery1.ExecSQL;
      // Перенести все данные за смену.
      SQLQuery1.SQL.Add('INSERT INTO '+INI.Tab+'r'+
      ' SELECT * FROM '+INI.Tab+
  //    ' ON CONFLICT DO NOTHING '+
      ' WHERE nU>='+S+' OR nU=0');
      SQLQuery1.ExecSQL;
      SQLTransaction1.Commit;
      SQLTransaction1.Options:=[];
      SQLQuery1.Close;
    except
      if PQConnection1.Connected then
        PQConnection1.Close;
    end;
Добавлено через 2 минуты
Цитата Сообщение от Аватар Посмотреть сообщение
а в строке 1 что?
Спасибо, что-то я не заметил, что пропустил:
Delphi
1
2
      SQLQuery1.Active:=false;
      SQLQuery1.SQL.Clear;
Добавлено через 2 минуты
Однако, когда раскоментировал "ON CONFLICT DO NOTHING" опять появилась ошибка...
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
23.01.2024, 11:57
Цитата Сообщение от shyub Посмотреть сообщение
ON CONFLICT DO NOTHING
PostgreSQL 9.5

а текст ошибки?
0
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,211
23.01.2024, 12:00  [ТС]
Не в том месте вставлял команду предотвращения конфликтов. Поставил в конце и всё заработало:
Delphi
1
2
SQLQuery1.SQL.Add('INSERT INTO '+INI.Tab+'r'+' SELECT * FROM '+INI.Tab+
  ' WHERE nU>='+S+' OR nU=0 ON CONFLICT DO NOTHING');
Добавлено через 1 минуту
У меня PostgreSQL-16.1-1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.01.2024, 12:00
Помогаю со студенческими работами здесь

Как синхронизировать сокет
Добрый день, всех с наступающим. Вопрос такой на сегодня, как синхронизировать TClientSocket, TServerSocket. Вот у меня имеются эти...

Как синхронизировать потоки?
Есть метод с параметрами, данный метод будет использоваться в трех разных потоках. Параметры задаются в цикле, как сделать, чтобы эти...

Как синхронизировать время
не знаю с чего начать... почитал, много чего и непонятного в инете написано... Понимаю, что начинать надо с контроллера домена(КД), но...

Как синхронизировать 2 ListBox'a ?
Имеются 2 ListBox'a с данными из одной таблицы но содержат разные столбцы. Нужно их синхронизировать, что я сделал: ...

Как синхронизировать JFrame
Доброго времени суток товарищи! Есть вопрос, может он странный, но все же попрошу ответить или дать ссылки на статьи какие. Предположим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 19.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru