Table创建存储过程插入数据时未找到

Table not found when creating Stored Procedure to insert data

在使用 pagila-insert-data.sql 文件导入数据后,我正在使用从此 repo 中找到的数据集创建一个存储过程。

该程序用于向staff插入数据table。下面是我用来创建程序的命令:

psql -c 'CREATE OR REPLACE PROCEDURE staff_insert_data("first_name" text, "last_name" text, "address_id" text, "email" text, "store_id" smallint, "active" text, "password" text, "picture" text) LANGUAGE SQL AS $$ INSERT INTO public.staff VALUES ("first_name", "last_name", "address_id", "email", "store_id", "active", "password", "picture"); $$;'

当我执行命令时,我收到一条错误消息:

ERROR:  relation "public.staff" does not exist
LINE 1: ...t, "picture" text) LANGUAGE SQL AS $$ INSERT INTO public.staff VALU...                                                           ^

我不明白为什么它说 staff table 不存在。我可以确认 table 存在。当我执行 \d "public.staff" 时,输出是:

                                          Table "public.staff"
   Column    |           Type           | Collation | Nullable |                 Default
-------------+--------------------------+-----------+----------+-----------------------------------------
 staff_id    | integer                  |           | not null | nextval('staff_staff_id_seq'::regclass)
 first_name  | text                     |           | not null |
 last_name   | text                     |           | not null |
 address_id  | smallint                 |           | not null |
 email       | text                     |           |          |
 store_id    | smallint                 |           | not null |
 active      | boolean                  |           | not null | true
 username    | text                     |           | not null |
 password    | text                     |           |          |
 last_update | timestamp with time zone |           | not null | now()
 picture     | bytea                    |           |          |

明确地说,我已经尝试了 public.staff 的多次迭代,有和没有双引号,没有 public 模式,有单引号。

完全合法的 Postgres table 名称 public.staff

不需要任何引号

唯一合理的解释是,您的 psql 调用没有任何显式连接参数,默认使用与您预期不同的数据库(和集群)。并且(幸运的是!)没有同名的 table。

通过显式向 psql 提供一项或多项(database_name、端口、角色)进行修复。喜欢:

psql -d mydb -p 5432 -U myuser -c 'CREATE ...'

psql 手册章节 "Connecting to a Database" 中的详细说明。