首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Sqitch迁移的数据库播种

基于Sqitch迁移的数据库播种
EN

Stack Overflow用户
提问于 2020-05-22 08:45:21
回答 1查看 464关注 0票数 0

我有一组创建表和函数等的Sqitch迁移,但是,我也需要用我的应用程序所需的基本数据集为我的数据库添加种子。

然而,有些种子需要来自先前创建的种子的Ids。例如,我有一个创建Post的函数和一个注释的函数,在我创建了一个Post之后,我需要创建引用Post Id的注释。

我的post_create函数如下所示:

代码语言:javascript
复制
BEGIN;

  CREATE FUNCTION post_create(
    _title TEXT,
    _body TEXT
  )
  RETURNS SETOF post_type
  LANGUAGE plpgsql
  AS $$
    BEGIN
      RETURN QUERY (
        WITH _created_post AS (  
          INSERT INTO "post" (
            "title",
            "body"
            "created_at"
          )
          VALUES (
            _title,
            _body,
            ROUND(EXTRACT(EPOCH FROM now()))
          )
          RETURNING
            *
        )
        SELECT
          *
        FROM
          _created_post
      );
    END;
  $$;

COMMIT;

我的comment_create函数看起来很相似,如下所示:

代码语言:javascript
复制
BEGIN;

  CREATE FUNCTION comment_create(
    _post_id INTEGER,
    _body TEXT
  )
  RETURNS SETOF comment_type
  LANGUAGE plpgsql
  AS $$
    BEGIN
      RETURN QUERY (
        WITH _created_comment AS (  
          INSERT INTO "comment" (
            "post_id",
            "body"
            "created_at"
          )
          VALUES (
            _post_id,
            _body,
            ROUND(EXTRACT(EPOCH FROM now()))
          )
          RETURNING
            *
        )
        SELECT
          *
        FROM
          _created_comment
      );
    END;
  $$;

COMMIT;

我的种子迁移基本上是一个空白的Sqitch迁移:

代码语言:javascript
复制
-- Deploy my-app:seeds to pg
-- requires: post_create
-- requires: comment_create

BEGIN;

  -- Create a post and capture the post Id
  -- Create a comment with previously captured post Id

COMMIT;

但是,我很难找到正确的语法来使它正常工作。

如何使我的Sqitch迁移脚本调用函数,并在调用其他函数时将结果用作输入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-07 20:44:09

使用匿名函数?:https://www.postgresql.org/docs/12/sql-do.html

代码语言:javascript
复制
DO $$
DECLARE
    post post_type;
BEGIN
    --Edited to version that Luke created and used.
    SELECT * FROM post_create(...) INTO post;
    PERFORM comment_create(post.id, 'body text');
END$$;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61951096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档