Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / UPSERT с множеством строк / 3 сообщений из 3, страница 1 из 1
13.03.2018, 22:13
    #39614422
Closius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPSERT с множеством строк
Я пытаюсь сделать UPSERT с множеством строк. Работаю через Django 2, PostgreSQL 9.5.9

Таблица с которой работаю следующая:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
\d+ candle
                                                           Table "public.candle"
      Column       |           Type           |                      Modifiers                      | Storage | Stats target | Description 
-------------------+--------------------------+-----------------------------------------------------+---------+--------------+-------------
 id                | integer                  | not null default nextval('candle_id_seq'::regclass) | plain   |              | 
 mts               | timestamp with time zone | not null                                            | plain   |              | 
 open              | numeric(200,40)          | not null                                            | main    |              | 
 close             | numeric(200,40)          | not null                                            | main    |              | 
 high              | numeric(200,40)          | not null                                            | main    |              | 
 low               | numeric(200,40)          | not null                                            | main    |              | 
 volume            | numeric(200,40)          | not null                                            | main    |              | 
 pair_timeframe_id | integer                  | not null                                            | plain   |              | 
Indexes:
    "candle_pkey" PRIMARY KEY, btree (id)
    "candle_mts_84b62390_uniq" UNIQUE CONSTRAINT, btree (mts)
    "candle_pair_timeframe_id_3f7b76ce" btree (pair_timeframe_id)
Foreign-key constraints:
    "candle_pair_timeframe_id_3f7b76ce_fk_pair_timeframe_id" FOREIGN KEY (pair_timeframe_id) REFERENCES pair_timeframe(id) DEFERRABLE INITIALLY DEFERRED




Часто приходят новые данные, обрабатываю их таким запросом:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    with connection.cursor() as cursor:
        g = '''
                                INSERT INTO candle (
                                  pair_timeframe_id, mts, open, close, high, low, volume
                                  ) VALUES %s
                                  ON CONFLICT (mts)
                                  DO UPDATE SET
                                        pair_timeframe_id = EXCLUDED.pair_timeframe_id,
                                        open = EXCLUDED.open,
                                        close = EXCLUDED.close,
                                        high = EXCLUDED.high,
                                        low = EXCLUDED.low,
                                        volume = EXCLUDED.volume;
        ''' % (data)
        cursor.execute(g)



Получаются такие запросы (иногда много строк обновлять/добавлять, иногда мало, иногда одна):

Код: sql
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.
INSERT INTO candle (
  pair_timeframe_id, mts, open, close, high, low, volume
  ) VALUES (1, '2018-03-13 18:52:00', 248.64, 248.68, 248.68, 248.64, 9.965), (1, '2018-03-13 18:51:00', 247.92, 248.65, 248.65, 247.92, 11.46482352), (1, '2018-03-13 18:50:00', 247.97, 248.18, 248.18, 247.97, 125.73717713), (1, '2018-03-13 18:48:00', 247.46, 247.95, 247.95, 247.12, 31.86128355), (1, '2018-03-13 18:46:00', 247.96, 247.33, 247.96, 247.33, 2), (1, '2018-03-13 18:45:00', 247.61, 247.67, 247.67, 247.61, 15.4), (1, '2018-03-13 18:44:00', 247.35, 247.67, 247.67, 247.33, 49.2068016), (1, '2018-03-13 18:43:00', 247.35, 247.45, 247.45, 247.35, 3.36161304), (1, '2018-03-13 18:41:00', 247.48, 247.67, 247.67, 247.48, 10.29851607)
  ON CONFLICT (mts)
  DO UPDATE SET
        pair_timeframe_id = EXCLUDED.pair_timeframe_id,
        open = EXCLUDED.open,
        close = EXCLUDED.close,
        high = EXCLUDED.high,
        low = EXCLUDED.low,
        volume = EXCLUDED.volume;



INSERT INTO candle (
  pair_timeframe_id, mts, open, close, high, low, volume
  ) VALUES (1, '2018-03-13 18:51:00', 247.92, 248.65, 248.65, 247.92, 11.46482352)
  ON CONFLICT (mts)
  DO UPDATE SET
        pair_timeframe_id = EXCLUDED.pair_timeframe_id,
        open = EXCLUDED.open,
        close = EXCLUDED.close,
        high = EXCLUDED.high,
        low = EXCLUDED.low,
        volume = EXCLUDED.volume;







Сделал логирование запросов, по логам видно, что многие запросы должны быть выполнены и должны появиться новые строки, но они не появляются. А иногда появляются, иногда вообеще кол-во строк в таблице уменьшается(!).

Может быть я не правильно формирую запросы (UPSERT)? Подскажите пожалуйста, что это моет быть?
...
Рейтинг: 0 / 0
13.03.2018, 23:23
    #39614453
Closius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPSERT с множеством строк
Изменил запрос на такой. Добавил WHERE для UPDATE. Вроде заработало.

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    with connection.cursor() as cursor:
        g = '''
                                INSERT INTO candle (
                                  pair_timeframe_id, mts, open, close, high, low, volume
                                  ) VALUES %s
                                  ON CONFLICT (mts)
                                  DO UPDATE SET
                                        open = EXCLUDED.open,
                                        close = EXCLUDED.close,
                                        high = EXCLUDED.high,
                                        low = EXCLUDED.low,
                                        volume = EXCLUDED.volume
                                  WHERE candle.pair_timeframe_id = %s;
        ''' % (data, str(pairs_timeframes_id))
...
Рейтинг: 0 / 0
14.03.2018, 00:51
    #39614476
Closius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPSERT с множеством строк
Не работает... Из источника идут такие данные:

Код: sql
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
(5, '2018-03-13 21:36:00', 9106.9, 9106.9, 9106.9, 9106.9, 0.14997)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9106.9, 9106.9, 9106.9, 3.3481511)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9106.9, 9106.98836636, 9106.9, 8.8399811)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9102.9, 9106.98836636, 9102.9, 9.33746057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9101.1, 9106.98836636, 9101.1, 9.43746057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9100.9, 9106.98836636, 9100.9, 9.58737057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9090.5, 9106.98836636, 9090.5, 10.63734057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9096, 9106.98836636, 9090.5, 10.64734057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9093.8, 9106.98836636, 9090.5, 10.66424057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9093.8, 9106.98836636, 9090.5, 10.66424057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9093.8, 9106.98836636, 9090.5, 10.66424057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 12.86420057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 12.86420057)
(5, '2018-03-13 21:35:00', 9094.5, 9106.9, 9116.5, 9094.5, 8.95034702)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9090, 9090, 9090, 9.89444)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9090, 9090, 9090, 9.89444)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9088.7, 9090, 9088.7, 9.9444)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9086, 9090, 9086, 10.23432)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9086, 9090, 9086, 10.25632)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9086.2, 9090, 9086, 10.75390409)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9086.2, 9090, 9086, 10.75390409)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9086.2, 9090, 9086, 10.75390409)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9086.2, 9090, 9086, 10.75390409)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9086.2, 9090, 9086, 10.75390409)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:36:00', 9106.9, 9090, 9106.98836636, 9090, 14.96920057)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:38:00', 9091.6, 9091, 9091.6, 9091, 0.0257514)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:38:00', 9091.6, 9087.1, 9091.6, 9087.1, 0.5257514)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:38:00', 9091.6, 9087.1, 9091.6, 9087.1, 0.5257514)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:38:00', 9091.6, 9087.1, 9091.6, 9087.1, 0.5257514)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:38:00', 9091.6, 9086, 9091.6, 9086, 0.6257514)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:38:00', 9091.6, 9086, 9091.6, 9086, 0.6257514)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:37:00', 9090, 9091.4, 9091.4, 9086, 11.01376409)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.1, 9086.1, 9086.1, 0.0066)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.1, 9086.1, 9086.1, 0.0066)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.1, 9086.1, 9086.1, 0.0066)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.1, 9086.1, 9086.1, 0.0066)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.8, 9086.8, 9086.1, 0.1584)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.8, 9086.8, 9086.1, 0.1584)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.8, 9086.8, 9086.1, 0.1584)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.8, 9086.8, 9086.1, 0.1584)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.8, 9086.8, 9086.1, 0.1584)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9086.8, 9086.8, 9086.1, 0.1584)
(5, '2018-03-13 21:38:00', 9091.6, 9087.28083114, 9091.6, 9086, 1.6257514)
(5, '2018-03-13 21:39:00', 9086.1, 9089.9, 9089.9, 9086.1, 0.66744634)
(5, '2018-03-13 21:39:00', 9086.1, 9089.9, 9089.9, 9086.1, 0.66744634)



А в базе данных сохраняются не все:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
2018-03-14 00:39:00.000000
2018-03-14 00:38:00.000000
2018-03-14 00:36:00.000000
2018-03-14 00:34:00.000000
2018-03-14 00:29:00.000000
2018-03-14 00:28:00.000000
2018-03-14 00:27:00.000000
2018-03-14 00:26:00.000000



например куда пропала 35 и 37 минуты?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / UPSERT с множеством строк / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]