2014-10-09 2 views
0

Как создать индекс в PostgreSQL, как:PostgreSQL перепечатывать в индексе

CREATE INDEX i_users_user_id 
ON users 
USING btree (user_id::character varying); 

Я хочу Integer столбец вести себя как строковый столбец:

SELECT * FROM vw_users WHERE user_id='string' 

«строка» некоторое значение, и я не» знаю, если это user_id или session_id и я хочу только один запрос :)

vw_users является:

SELECT user_id::character varying FROM users 
UNION 
SELECT session_id as user_id FROM temp_users 

Таблицы:

CREATE TABLE users (user_id integer) 
CREATE TABLE temp_users (session_id character varying) 

С уважением

+0

Side Примечание: назначение 'varchar' для поля _ID_ является * * BAD ** idea –

+0

varchar для id - плохая идея, но у меня есть session_id-столбец, это должен быть varchar. Я попытался создать индекс, который я написал, но это была ошибка с сообщением: синтаксическая ошибка в или рядом с «::» –

+0

. Моя следующая идея - создать таблицу и т. Д. 'CREATE TABLE users (user_id integer, user_id_chv character variable)' с правилом для clone integer column в столбце varchar, чем я могу создать представление и индекс для столбцов varchar. Но это мой последний выбор. –

ответ

1

индекс на выражение требует дополнительный набор скобок:

CREATE INDEX i_users_user_id 
ON users 
USING btree ((user_id::character varying)); 
Смежные вопросы