我正在使用 PostgresQL 中的序列在 Typescript 中执行如下 Upsert
let SAVE_CUSTOMER = `
INSERT INTO "db"."customers" ("id", "name")
VALUES (NEXTVAL('customers_sq'), $1)
ON CONFLICT ("id") DO UPDATE
SET "name" = $1;
`;
function saveCustomer(name: string) {
datasource.query(SAVE_CUSTOMER, name)
}
地点:
我收到以下错误消息:
error: i: relation \"customers_sq\" does not exist
我尝试过的事情也不起作用:
NEXTVAL('db'.'customers_sq')
NEXTVAL("db"."customers_sq")
NEXTVAL("customers_sq")
我可以在 Postgres 数据库查看器中看到该序列(也是全部小写)。有关如何调试的任何提示?
nextval()
需要一个regclass
类型的单个参数,即“对象标识符类型”,这基本上是基本类型OID上的域。 说明书:
按命名空间分组的对象的所有 OID 别名类型 接受模式限定名称,并将显示模式限定名称 如果在当前搜索路径中找不到该对象,则在输出中 没有资格。例如,
是可以接受的 输入myschema.mytable
(如果有这样的表格)。该值可能是 输出为regclass
,或只是myschema.mytable
,具体取决于 当前搜索路径。mytable
因此,如果您的模式名称是
db
并且序列是 customers_sq
- 都是令人惊讶的选择! - 那么这是正确的调用:
SELECT nextval('db.customers_sq')