代码之家  ›  专栏  ›  技术社区  ›  lentyai

PostgreSQL错误:关系<表>不存在

  •  1
  • lentyai  · 技术社区  · 7 年前

    我是Postgres和plpsql的新手,如果答案很明显的话,我很抱歉。但是我没能找出我做错了什么。当我使用sample DB函数时,一切都很好。当我试图创建自己的:

    CREATE OR REPLACE FUNCTION get_trans (p_param VARCHAR) 
      RETURNS TABLE (
        amount money,
        transactionId UUID
      ) 
      AS $$
      BEGIN
        RETURN QUERY SELECT
          amount,
          transactionId
        FROM
        transactions;
      END; $$ 
    
    LANGUAGE 'plpgsql';
    

    函数执行,但通过运行以下测试语句对其进行测试失败:

    SELECT * 
    FROM public.get_trans(
      'bs'
    )
    

    出现此错误时:

    ERROR:  relation "public.transactions" does not exist
    LINE 4:  FROM public.transactions
              ^
    QUERY:  SELECT
              amount,
              transactionId
    FROM public.transactions
    CONTEXT:  PL/pgSQL function get_trans(character varying) line 4 at RETURN 
    QUERY
    SQL state: 42P01
    

    看起来这是plpsql的一个非常常见的错误,我意识到我很可能遗漏了smth显然,但是到目前为止,这些答案对我的情况都没有帮助。是一个直行的站立桌,目前只有主键。

    任何提示都非常感谢。

    更新:因此,感谢LD I发现,尽管语法错误,但创建的表在任何模式中都不存在。结果发现postgres与MSSQL的区别更大,而且很难闪现脚本错误。主要错误是-不能在表或列定义中使用camel case。一旦我修复了这些并重新运行函数,一切都会好起来的。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Łukasz Duda    7 年前

    功能本身似乎还可以。 请确保通过使用(在结果中检查列Table Schema)公共表中存在表事务:

    SELECT * 
    FROM information_schema.tables 
    WHERE  table_name = 'transactions'