首页 > 解决方案 > github 操作 - 在 postgres 服务中运行 sql 脚本

问题描述

我想在 github 操作中的 postgres 服务中运行一个脚本,该脚本创建一个表并添加一个扩展。我怎样才能做到这一点?我需要制作一个 shell 脚本还是可以在 yaml 文件中正确执行?

sql脚本

drop database mydb;
create database mydb;
\c mydb;
CREATE EXTENSION "pgcrypto";

工作流程

name: API Integration Tests

on: 
    pull_request:
    push:
        branches:
            -master

env:
    DB_HOST: localhost
    DB_USERNAME: postgres
    DB_PASSWORD: rt

jobs:
    build:
        runs-on: ubuntu-latest

        strategy:
          matrix:
            node-version: [10.x, 12.x, 13.x]


    services:
        postgres:
          image: postgres:latest
          env:
            POSTGRES_DB: mydb        
            POSTGRES_PASSWORD: helloworl
            POSTGRES_USER: postgres
          ports:
            - 5433:5432
          # Set health checks to wait until postgres has started
          options: >-
            --health-cmd pg_isready
            --health-interval 10s
            --health-timeout 5s
            --health-retries 5
    steps:
        - uses: actions/checkout@v1
        - name: Use Node.js ${{ matrix.node-version }}
            uses: actions/setup-node@v1
            with:
            node-version: ${{ matrix.node-version }}
        - name: npm install
            run: npm ci
        - name: npm test
            run: npm run test

标签: postgresqlgithub-actions

解决方案


您可以添加使用 PSQL 命令的步骤。

这是创建数据库的示例步骤:

- name: Create database
  run: |
     PGPASSWORD=helloworl psql -U postgres -tc "SELECT 'CREATE DATABASE mydb' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mydb')"

顺便说一句,我注意到您想要的下一个命令是: CREATE EXTENSION "pgcrypto";,我认为这是因为您想要生成 UUID(常见用例)。请注意,您不需要它,get_random_uuid()因为从 v13 开始,Postgres 原生支持它。

但是,如果你真的,真的,真的想添加 pgcrypto,你可以使用这个步骤:

- name: Enable pgcrypto extension
  run: |
     PGPASSWORD=helloworl psql -U postgres -tc "CREATE EXTENSION 'pgcrypto';"

推荐阅读