sql - 重复使用插入的 ID

标签 sql postgresql insert

假设我有一张契约(Contract)表:

  id  |  name | document_url  
-----------------------------

其中 documentUrl 自动生成/上传到 S3 并具有以下结构:

https://s3-bucket.aws.com/${id}.pdf

我的问题是如何将其插入到单个 INSERT 查询中。

INSERT INTO contracts(name, document_url)
VALUES('bob', ${process.env.S3_BUCKET}.aws.com/????.pdf}

我从 NodeJS 服务器内部调用此代码,存储桶作为环境变量存储在每个服务器的数据库外部。有什么方法可以获取当前正在插入的行的 ID,还是我必须插入返回,然后在事务中更新?

最佳答案

也许您的表可以跳过尝试存储 document_url 并看起来更像:

id  |  name | s3_bucket  
-----------------------

然后查询:

SELECT name
      ,'https://' || s3_bucket  || '/' || id || '.pdf' AS document_url
  FROM contracts

基于查询创建 View 将封装组合,以便那些查询不需要知道如何将其粘贴在一起:

CREATE VIEW contract_documents AS
SELECT name
      ,'https://' || s3_bucket  || '/' || id || '.pdf' AS document_url
  FROM contracts

然后在外部:

SELECT name, document_url
  FROM contract_documents

关于sql - 重复使用插入的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45524392/

相关文章:

mysql - SQL按类别平均列

sql - 嵌套 SQL 查询耗时过长

php - 检查SQL表中的数据是否已经存在

postgresql - MyBatis 与 postgres 抛出 "ERROR: relation "双“不存在”

MySQL 重复键更新的替代方案

linq-to-sql - 使用 Linq 插入数据

MYSQL 表,table_tr SELECT 默认语言 WHEN 翻译不可用

python - Postgres COPY FROM 命令无法通过 Python 工作

ruby-on-rails - PostgreSQL JSONB - 使用单个查询更新所有行的键名

PHP 这段代码有什么问题?