2014-10-15 3 views
2

Я хочу назначить регистр с псевдонимом для имени столбца в запросе, но PostgreSQL просто игнорирует любой случай в псевдониме и оставляет его в нижнем регистре. Я знаю, что он хранит все в нижнем регистре, но я просто хочу, чтобы псевдослучайный псевдоним в запросе. Любой способ заставить его работать? Переименование материала вручную после выполнения запроса для огромных наборов dict звучит смешно.PostgreSQL-запрос и чувствительность к регистру

Обновление: Важное примечание. Я использую Amazon Redshift. Возможно ли, что Amazon ограничивает это?

Пример

select superid from supertable; 
... 
cursor.execute(query) 
results = cursor.fetchall()  
for row in results: 
    print row['superid'] 
//^WORKING 

------------------------ 

select superid as "superId" from supertable; 
... 

cursor.execute(query) 
results = cursor.fetchall() 
for row in results: 
    print row['superId'] 
//^NOT WORKING 
+0

Я не могу воспроизвести его. Использование 'col_name как FOO' (без кавычек) декапитализует' FOO', но 'col_name как« FOO »' (с кавычками) не похоже. – amphetamachine

+0

Используйте двойные кавычки вокруг ярлыков, если вы хотите, чтобы они были чувствительны к регистру. –

+0

Если я использую одинарные кавычки в запросе, тогда я получаю ошибку в запросе, если я использую двойные кавычки в getitem, тогда он выдает такую ​​же ошибку. Я попытался проверить ключи в результирующем списке, и все они являются строчными, независимо от случая в запросе. Возможно, это красное смещение Amazon, я добавил к этому заметку. Все еще ищут помощи. – dimon222

ответ

0

Просто попробовать, это может быть о локализации. Попробуйте использовать разные имена таблиц или столбцов, которые не содержат «I». не superId может быть просто супер.

0

Это действительно вещь красного смещения. Очень сложно использовать смешанный футляр. В то время как оператор SELECT с использованием смешанного случая отлично работает с использованием JDBC-коннектора, он будет игнорировать ваши попытки использовать смешанный случай через внутренние SQL-объекты и, возможно, API, что, по-моему, использует psycopg.

У меня возникла проблема, когда я не мог загружать данные с помощью команды COPY, потому что мне не удалось создать имена столбцов с любыми символами верхнего регистра. COPY отлично работает с одной таблицей красного смещения на другую, независимо от случая, но COPY с S3 этого не делает.

Я пробовал двойные кавычки вокруг имен столбцов, но Redshift игнорировал их, в то время как мой локальный экземпляр postgres работал просто отлично и использовал мои литературные строки со смешанным случаем.

Для справки, мой вопрос (и ответ) здесь.

Does case matter when 'auto' loading data from S3 into a Redshift table?

Надежда, что помогает, даже если это не ответ, который вы надеялись.

Смежные вопросы