
Tim
25.01.2017
09:11:58
ну я создаю с domain: ''
так что не в дефолте дело

I
25.01.2017
09:12:26
посмотри на индекс в базе самой

Tim
25.01.2017
09:13:01

Google

I
25.01.2017
09:13:14
вот я и говорю, надо на сам индекс в базе глянуть

Tim
25.01.2017
09:14:29
CREATE UNIQUE INDEX index_stores_on_domain
ON "1".stores
USING btree
(domain COLLATE pg_catalog."default");

I
25.01.2017
09:14:54
Ну и все, не сработал where

Tim
25.01.2017
09:31:57
никто с partial index не работал? что-то ваще не могу найти в чем проблема
походу придётся sql прям в миграции писать
а как работает validates :x, uniqueness: true?
если я уберу unique: true с индекса, то всё обязательно порушится? можно рассчитывать на валидатор рельс?

Adamtsov
25.01.2017
09:40:08
uniqueness делает exists запрос

Tim
25.01.2017
09:46:41
сделал миграцию
change_column :stores, :domain, :string, limit: 32, default: '', null: false
remove_index :stores, :domain
add_index :stores, :domain, name: 'index_stores_on_domain', unique: false
валидатор
validates :domain, length: { minimum: 4, maximum: 32 }, uniqueness: true, allow_blank: true
но все равно при попытке создания двух store с пустыми domain возникает эксэпшн:
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_stores_on_domain"
DETAIL: Key (domain)=() already exists.
что за пиздус?
allow_blank должен не валидейтить пустые строки. да и на стороне базы данных ошибка похоже
может её надо как-то рестартнуть? почему она меня не слушается?

Alexander
25.01.2017
09:54:50
Видимо у тебя 2 записи в таблице с '' вот и ошибка
allow_blank не видит или тп

Google

Tim
25.01.2017
09:55:15
я как раз хочу чтобы можно было создать две такие записи

Alexander
25.01.2017
09:55:58
в pg на сколько знаю уникальное поле - оно уникальное, на зависимо от того что там лежит, такого же быть не должно

Tim
25.01.2017
09:56:19
я убрал уникальность с индекса и с колонки
вернее на колонке не написал ничего, а на индексе явно указал что не уникальное

Alexander
25.01.2017
09:56:57
если бы убрал, ошибки не было

Tim
25.01.2017
09:57:11
я миграцию выше написал

Alexander
25.01.2017
09:57:28
index_stores_on_domain посмотри этот индекс, удалить попробуй его
на прямую в базе

Tim
25.01.2017
09:58:03
и зачем?

Alexander
25.01.2017
09:58:05
пересоздай его

Tim
25.01.2017
09:58:19
я его в миграции каждый раз пересоздаю
уже миграций 10 мб написал, просто на ровном месте проблемы

Ivan
25.01.2017
09:59:30
очень интересная статья
https://crystal-lang.org/2017/01/06/the-charly-programming-language.html

Alexander
25.01.2017
10:00:51
ты же знаешь почему эта ошибка лезет?

Tim
25.01.2017
10:00:56
может есть какая-то скрытая constraint, которую я не могу найти?

Alexander
25.01.2017
10:01:13
по моему ты усложняешь сейчас

Tim
25.01.2017
10:01:18
я знаю, он пытается заставить все domain быть уникальными
я ему говорю, чувак, мне не надо уникальные domain
он говорит, иди нахуй

Alexander
25.01.2017
10:02:17
так, это ты через рельсы все делаешь, а пробовал на прямую посмотреть что у тебя там происходит?

Google

Tim
25.01.2017
10:02:54
я заглянул в таблицу, там вот что в этом индексе написано:
CREATE UNIQUE INDEX index_stores_on_domain
ON "1".stores
USING btree
(domain COLLATE pg_catalog."default");
может это бинарное дерево заставляет быть индексы уникальными?
и внутри него есть ограничение

I
25.01.2017
10:03:38
да не делаешь ты своего where тут
я тебе вот о чем

Tim
25.01.2017
10:03:50
хотя бин дерево позволяет одинаковые ключи

I
25.01.2017
10:03:52
попробуй запрос свой изменить

Tim
25.01.2017
10:03:58
я уже отчаялся вписать where
я теперь просто убираю uniqueness
но даже это не получается

I
25.01.2017
10:04:22
напиши запрос на создание индекса руками

Tim
25.01.2017
10:04:59
у меня мультитенантное приложение, тут обосраться можно

Tim
25.01.2017
10:05:14
хотя если знать название текущей бд то нет
как узнать название?

I
25.01.2017
10:05:36
что(

Tim
25.01.2017
10:05:55
ладно, это не важно

babysitter
25.01.2017
10:06:03
гайз, сам не люблю новичков, все понимаю, один вопрос задам и больше не побеспокою. с помощью рвм пытаюсь завести очень старый проект на 1.8.7 так вот версия рубигемс гвоздями прибита к версии руби? то есть мне нужна версия rubygems 1.8.7? сейчас gem —version выдает 2.0.17, а это что-то слишком свежо

I
25.01.2017
10:06:22
CREATE UNIQUE INDEX index_stores_on_domain
ON "1".stores WHERE char_length(domain) > 0
USING btree
(domain COLLATE pg_catalog."default");

Tim
25.01.2017
10:06:50
короче там надо ещё прописывать ON "2", "3" и т.д.

I
25.01.2017
10:07:01

Google

babysitter
25.01.2017
10:07:36
поставить то не проблема

Tim
25.01.2017
10:07:51
а, там даже не поменялось ниче походу лол
щас присмотрелся

I
25.01.2017
10:07:57
там не рубигемс к версии руби прибита
там гемы сделаны под определенную версию рубигемс были
ну, там было окно совместимостей
сильно большой проект?

babysitter
25.01.2017
10:10:08
нет, этот совсем маленький. один раз поднимал рельсовый, так там ощутил всю боль версий гемов. сам в руби мало понимаю.

Admin
ERROR: S client not available

babysitter
25.01.2017
10:10:40
думаю, что все нормально будет. спасибо за информацию

Tim
25.01.2017
10:10:56
как написать такую миграцию учитывая это?

I
25.01.2017
10:13:11
перебирай схемы просто и создавай запрос и потом его выполняй)
типа [:a,:b,:c].map{|scheme| тут_запрос}.join(';')
и выполняешь его

Tim
25.01.2017
10:16:10
попробовал сделать миграцию только с удалением... и она не работает
чё за ёбаный пиздец
кошмарный сон какой-то
хотя в schema.rb он удалился

I
25.01.2017
10:17:01
а сама миграция что сказала?

Google

Tim
25.01.2017
10:17:16
все было ок
— remove_index(:stores, :domain)
-> 0.0018s
но в самой базе эти блядские индексы присутствуют
мб надо по имени удалять
короче всё норм работает, но для этого надо было потрахаться и вручную поудалять индексы.. хз как это на продакшене будет работать

Amir
25.01.2017
12:51:05
Подскажите ребята
Как правильно обычно делают такую задачу
Есть RabbitMQ
есть слушатель, его задача обработать очередь на 100%
т.е. во время обработки происходит ошибка, и уже нет смысла идти дальше обработать по очереди
а надо дождаться некоторое время
например воркер данные тянет из веб сервиса, а веб сервис часто бывает что становиться не доступен, на некоторое время
надо чтобы воркер подождал 5 минут, и сделал попытку снова и продолжил работу

Lupsick
25.01.2017
12:53:59

Tim
25.01.2017
13:27:22
можно ли как-нибудь быстро узнавать сколько записей в таблице?
Store.count который Store.all.count выглядят медленными

I
25.01.2017
13:27:44
count только

Alex
25.01.2017
13:27:46
Post.count?

Tim
25.01.2017
13:27:53
((

Alex
25.01.2017
13:27:56
плюс кэш каунтер можно прикрутить

Tim
25.01.2017
13:28:04
вернее, мне надо узнать, пустая ли таблица

Alex
25.01.2017
13:28:06
Чтобы не лохануться как в том приколе от твиттера

I
25.01.2017
13:28:19
пустая ли - any

Tim
25.01.2017
13:28:38

Alex
25.01.2017
13:29:08
http://crestcode.com/how-to-check-if-a-table-is-empty-in-rails/

I
25.01.2017
13:31:06
User.empty? тоже проканает

Alexander
25.01.2017
13:32:45

Alex
25.01.2017
13:33:27
Век живи - век учись. Правда не было кейсов когда нужно проверить что таблица пустая.