LINUX.ORG.RU

Сравниваем строки с Юлией Высоцкой

 ,


1

3

Имеется таблица:

create table t (
    "path" text primary key,
    ...
);

Безо всяких там переопределённых collation, дефолтное collation базы – en_US.utf8, connection charset – тоже UTF8.

В таблице этой есть строка со значением path = '/private/auto_test_intern/U3.json' (зуб даю, значение именно такое: 33 байта, все символы – в обычном ASCII).

Делаем:

-- отдаёт 1 строку; length = 33:
select length("path"::bytea), * from t where "path" like '/private/auto_test_intern/U3.json'; 

-- 0 строк:
select * from t where "path" = '/private/auto_test_intern/U3.json';

-- 1 строка:
select * from t where "path" like '/private/auto_test_intern/U3.json' and substr("path", 1, 33) = '/private/auto_test_intern/U3.json';

Вопрос: ЧЗНх во втором запросе?!



Последнее исправление: pr849 (всего исправлений: 4)
Ответ на: комментарий от peregrine

А что с зеркалами делать и когда у сайта просто несколько доменов?

а что делать, когда был twitter.com, а стал x.com? Вера в существование неизменных натуральных ключей - это удел теоретиков, практика совсем иная.

borisych ★★★★★
()

Если нужен уникальный индекс по path text, то (синтетический int PK + path UK) – это два индекса, а (path PK) – один. Если к этой таблице есть FK из других таблиц, тогда it depends, а если нет, то заводить синтестический PK не имеет никакого смысла.

pr849
() автор топика
Ответ на: комментарий от borisych

в первую очередь UUID позволяет взять кусок данных из одной БД в виде insert/upsert и затащить его в другую БД

Ну, да, в том и кайф.

когда нужно подготовить данные на тестовом стенде

Вовсе даже не обязательно именно так.

Вот прям сейчас вполне себе работают два физических Мастера в логической репликации, а клиенты могут писать свои события в оба, в одну и ту же таблицу, с единственным UUID-ключом.

Toxo2 ★★★★
()