2015-03-04 5 views
3

Как я могу выполнитьPostgres выбрать только если таблица существует

select * from my_table 

но избежать бросать ошибки, если my_table не существует

возможно ли это?

UPDATE: Я завязываюсь в Odoo, я создаю таблицу, когда пользователь нажимает кнопку, поэтому в первый раз, когда мой модуль установлен, таблица не будет существовать, и я не хочу видеть ошибку ,

Я решил его питона с помощью:

try: cr.execute(my_query) 
expetion: pass 

Я извиняюсь, если я не был достаточно явным, это мой первый вопрос здесь: P

+2

Проверяя информацию таблицы базы метаданных/схемы - это зависит от того, где Postgre хранит их (т.е. MySQL имеет конкретные таблицы, содержащие такую ​​информацию, в Oracle они могут быть запрошены из представлений). Вам необходимо проверить документы СУБД. – watery

+0

Как вообще возможно, что вы запрашиваете из таблицы, которая не существует? – zerkms

+0

Странная ситуация, но вы можете проверить ее до: http://www.postgresql.org/docs/current/interactive/infoschema-tables.html –

ответ

0

ли работать вы его в какой-то функции? Если нет, весь этот вопрос не имеет смысла ... Если да - попробуйте поймать ошибку, как описано здесь: http://www.postgresql.org/docs/9.1/static/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING

Вам понадобится ловушка 42P01 undefined_table SQLSTATE.

Таким образом, в вашей функции вы можете сделать:

BEGIN 
    SELECT * FROM sometable 
EXCEPTION 
    WHEN undefined_table THEN 
    -- Do something 
    WHEN others THEN 
    -- Do something else 
END; 
+0

спасибо. Я отправляю запрос из функции в Python. Thanxs для вас. Я узнал, что у Python есть функция try-expetion, чтобы избежать ожидаемых ошибок. –

+0

Это похоже на совершенно другой случай. Я имел в виду ошибки захвата внутри функции PL/pgSQL (процедура выполнялась на стороне сервера). Вы пишете об улавливании ошибки на стороне клиента. В любом случае - рад, что я мог бы помочь. – murison

0

В качестве ДОПОЛНИТЕЛЬНО записок (не связанных с Postgresql), при запуске сервера Odoo, вы должны убедиться, что флаг -u установлен для того, чтобы ваша настройка odoo применяется Odoo ORM. Это гарантирует, что любые сделанные вами изменения, такие как создание/изменение таблицы, применяются к вашей базе данных Postgresql.

Таким образом, из CLI:

openerp-server -u module_name

или

openerp-server -u all

обновить все модули

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