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" 中的详细说明。
在使用 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" 中的详细说明。