как обновить массив в ящике

Я хотел бы знать, как я могу обновить значение, хранящееся в массиве, в crate.io

  • У меня есть таблица блога — blog_tbl
  • Столбец с массивом типов данных — tags
  • id колонка
  • Внутри столбца тегов у меня есть — ["tag1","tag2","tag3"]

Я хотел бы знать, как я буду идти об изменении 'tag1' в 'tag99'

Я старался

update blog_tbl set tags['tag1'] = 'tag99' where id = '1';

Также, как бы я добавил один конец? так, делая это —

["tag1","tag2","tag3","tag4"]

большое спасибо

1

Решение

К сожалению, в настоящее время это невозможно. Элементы массива могут быть выбраны только с использованием индексной записи (например, select tags[1] from blog_tbl;) но не обновляется. Возможно добавьте проблему GH, запрашивающую эту особенность.

1

Другие решения

Вы можете использовать шаблон, найденный здесь: https://crate.io/docs/reference/sql/occ.html#optimistic-update

Однако для этого необходимо выполнить изменение на стороне клиента. Псевдокод:

updated = False
while not updated:
cursor.execute('SELECT array_field, "_version" FROM table WHERE id=1')
row = cursor.fetchone()
current_array_field = row[array_field]
current_array_field.append('newtag')
cursor.execute('UPDATE array_field = current_array_field WHERE id=1 AND "_version" = row[version]')
if cursor.rowcount > 0:
updated = True

Это сделает ваше обновление частично безопасным для одновременных обновлений одного и того же поля.

0

По вопросам рекламы [email protected]