Postgres select 仅当 table 存在时

Postgres select only if table exists

如何执行

select * from my_table

但如果 my_table 不存在则避免抛出错误

可能吗?

更新:我在 Odoo 中工作,当用户按下按钮时我创建了 table,所以第一次安装我的模块时 table 将不存在并且我不想看到错误。

我在 python 中解决了这个问题,方法是:

try: cr.execute(my_query)
expetion: pass

对不起,如果我不够明确,这是我在这里的第一个问题:P

你运行它有某种功能吗?如果不是,整个问题就没有意义......如果是 - 只需尝试捕获错误,如下所述: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;

作为附加说明(与 Postgresql 无关),当您启动 Odoo 服务器时,您应该确保设置了 -u 标志以确保您的 odoo 定制被 Odoo ORM 应用。这确保您所做的任何修改,例如 table creation/modification 都应用于您的 Postgresql 数据库。

因此,从 CLI:

openerp-server -u module_name

openerp-server -u all

更新所有模块