Что означает следующее примечание в документации Django? - PullRequest
0 голосов
/ 05 февраля 2020

Просматривая документы для Django UUIDField, я увидел следующие

Поиск на PostgreSQL

Использование iexact, содержит, icontains, начинается с, istarts с, заканчивается с или т. е. с поисками на PostgreSQL, не работает для значений без дефисов, потому что PostgreSQL сохраняет их в типе переноса типа uuid.

Это что-то связанное с использованием UUIDField? Или это общее примечание для любых строковых значений? Если да, может ли кто-нибудь привести пример, когда эти операции не работают со строками без дефисов?

1 Ответ

0 голосов
/ 05 февраля 2020

Я понимаю, что это в первую очередь Django и как он обрабатывает столбцы uuid. Однако я должен отметить, что утверждение «PostgreSQL хранит их в типе данных uuid с переносами» в лучшем случае вводит в заблуждение, если не ошибочно. Postgres сохраняет затем как тип uuid, отображает дефисы, но их можно запрашивать с дефисами или без них. ДЕМО:

create table uuid_demo( uuid_col uuid, description test) ;

-- generate uuid to use in demo
select gen_random_uuid()
-- result f76fe42f-4328-479f-a446-93307fa21c1a

insert into uuid_demo(uuid_col, description)
   values ('f76fe42f-4328-479f-a446-93307fa21c1a'::uuid, 'With dashes') 
        , ('f76fe42f4328479fa44693307fa21c1a'::uuid, 'Without dashes'); 

-- with hyphens and with type cast 
select * 
  from uuid_demo
 where uuid_col = 'f76fe42f-4328-479f-a446-93307fa21c1a'::uuid; 

-- withou hyphens and with type cast
 select * 
  from uuid_demo
 where uuid_col = 'f76fe42f4328479fa44693307fa21c1a'::uuid; 

-- with hyphens and without type cast 
select * 
  from uuid_demo
 where uuid_col = 'f76fe42f-4328-479f-a446-93307fa21c1a';

-- without hyphens and without type cast
 select * 
  from uuid_demo
 where uuid_col = 'f76fe42f4328479fa44693307fa21c1a'; 


-- all 4 vereions produce the same result

 drop table uuid_demo; 

Так что не Postgres не может обрабатывать uuid без дефисов. В этом случае Django не может обрабатывать uuid без дефисов.

...