PostgreSQL:关系不存在错误

4
也许这个错误是由于SCHEMA的问题引起的,我尝试修复它,但是完全困惑了。
以下是详细描述。
有一个单独的文件运行以下命令:
CREATE DATABASE weather;
CREATE SCHEMA public;
CREATE SCHEMA schema1;

SET search_path = schema1, public;

CREATE TABLE "Sities" (
                    Id SERIAL PRIMARY KEY,
                    name TEXT,
                    country TEXT,
                    weather_id_api int);

CREATE TABLE "Forecasts" (
                    Id SERIAL PRIMARY KEY,
                    city_id int,
                    time DATE,
                    temp INT,
                    humidity INT,
                    pressure INT);

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO postgres;
GRANT usage ON SCHEMA public TO postgres;

每个命令的执行都会被检查错误。这些命令可以顺利执行。

在另一个文件中,执行了这样的命令:

SET search_path = schema1, public;
INSERT INTO "Sities" (name, country, weather_id_api)
            SELECT 'Orenburg', "RU", 234234
            WHERE NOT EXISTS (SELECT name FROM "Sities" WHERE name="Orenburg");

最后一条命令导致错误:

panic: pq: 关系 "Sities" 不存在

goroutine 1 [正在运行]: main.PostToDatabase(0x11731ee0) D:/Go/src/WeatherSoket/main.go:135 +0x40f main.Update() D:/Go/src/WeatherSoket/main.go:150 +0x52 main.main() D:/Go/src/WeatherSoket/main.go:165 +0xbe 退出状态 2


2
为什么不直接使用模式名称来引用?schema.table - salient
你能在控制台运行这些查询吗? - Eugene Lisitsky
1
@Being Sunny,“extra”?我认为,如果没有引号,PostgreSQL将会变成小写。 - ErvingGoffman
1
展示执行两个不同的SQL命令集的代码,并展示连接到数据库的代码。同时,在您的第一个文件顶部创建一个名为“weather”的数据库,由于脚本运行在您最初连接的数据库中,因此您的后续命令将在该新数据库之外执行。无论如何,您没有给我们完整的图片,所以我们无法提供帮助。 - mkopriva
1
另外从你的链接(https://ibb.co/iCLaRG)可以清楚地看到,你要么连接了错误的数据库(图片显示为postgres,谁知道你的Go代码连接的是哪个数据库...),要么你的第一组命令,即创建表的命令,并没有按照你的意图执行成功,因此你没有任何可操作的表。 - mkopriva
显示剩余12条评论
1个回答

1

这个有效 - 尝试检查引号"和撇号'

SET search_path = schema1, public;

INSERT INTO "Sities" (name, country, weather_id_api)
            SELECT 'Orenburg', 'RU', 234234
            WHERE NOT EXISTS (SELECT name FROM "Sities" WHERE name='Orenburg');

http://sqlfiddle.com/#!17/5abd9/4


显示 search_path; - Eugene Lisitsky
"$user",公共的 - ErvingGoffman
所以 search_path 没有被应用。你使用任何连接池吗? - Eugene Lisitsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接