postgresql - 在 Postgres 中的特定模式上创建序列时出错

标签 postgresql

在现有表上创建序列和链接期间,我在 Postgres 中遇到一个奇怪的错误。

我尝试在具有名为“testschema”的模式的现有数据库上执行以下脚本:

BEGIN TRANSACTION;

CREATE TABLE testschema.mytable (
    id INTEGER,
    value VARCHAR(30),
    CONSTRAINT pk_mytable PRIMARY KEY (id));

CREATE SEQUENCE testschema.mytable_id_seq;
ALTER TABLE testschema.mytable ALTER COLUMN  id SET NOT NULL;
ALTER TABLE testschema.mytable ALTER COLUMN  id SET DEFAULT nextval('mytable_id_seq');

COMMIT;

第二个 ALTER TABLE 查询出现以下错误:

********** Erreur **********

ERREUR: la relation « mytable_id_seq » n'existe pas État SQL :42P01

错误信息可以翻译为“Relation 'mytable_id_seq' does not exist”。

如果我尝试在没有架构的情况下(即在公共(public)架构中)执行此脚本,它会起作用。

我不明白它失败了什么。有人知道问题出在哪里吗?

感谢您的帮助。

最佳答案

替换:

ALTER TABLE testschema.mytable ALTER COLUMN  id SET DEFAULT nextval('mytable_id_seq');

通过

ALTER TABLE testschema.mytable ALTER COLUMN  id SET DEFAULT nextval('testschema.mytable_id_seq');

默认情况下,不使用模式限定符的对象在 search_path 变量中的模式中搜索。默认情况下,此变量中仅存在 public 模式。

所以最简单的方法是在引用对象时使用完全限定的限定符。 或者,您可以将新架构放在路径中,如下所示:

SET search_path TO testschema,public;

Source

关于postgresql - 在 Postgres 中的特定模式上创建序列时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26799971/

相关文章:

postgresql - SQL - 按字母顺序对列中的字符串进行排序

java - liferay生成的数据库名称是什么?

ruby-on-rails - Rails postgreSQL 重复键

postgresql - Postgres 方言在 Sequelize 中不起作用

sql - 更新 postgresql 9.1 数据库中的约束

sql - 即使在创建索引时 postgres 的性能也很慢

bash - 如何在远程机器上运行 SQL 查询并以 CSV 格式保存在本地

sql - Postgres : If we select a computed column multiple times, Postgres会一次又一次地计算它吗?

postgresql - 如何在ecto中编写复杂的子查询作为from子句?

postgresql - 从java调用postgres上的存储函数