Show HN: Pg_yregress, Structured Testing for Postgres

  • Fun fact: IJ has "embedded language" support, meaning it understands that some parts of yaml (and any other source code) are another source code and thus offers both syntax highlighting and its usual bunch of introspections. That may not be as meaningful for test SQL, since it probably doesn't have a ton of existing schema against which it should check, but it undoubtedly is helpful when IJ is told this is the PostgreSQL dialect of SQL and thus is able to offer relevant completion and quick-doc for the functions

    One can tell IJ what's going on in one of two ways: comment markup or creating a JSON Schema for the yaml and placing x-intellij-language-injection metadata into the relevant elements

      tests:
      - #language=SQL
        query: select 1 as result
        results:
        - result: 1
    
    or

      $id: pg_yregress
      $schema: "http://json-schema.org/draft-07/schema#"
      properties:
        tests:
          type: array
          items:
            $ref: '#/definitions/Test'
      definitions:
        Test:
          type: object
          properties:
            query:
              description: the test query to run
              type: string
              # https://github.com/JetBrains/intellij-community/blob/idea/233.9802.14/json/src/jsonSchema/schema.json#L52
              x-intellij-language-injection: SQL
            results:
              type: array
              item:
                type: object
                additionalProperties: true

  • This is such an interesting project. Having written SQL based tests with MTR, I really love the reusable queries and not having to dump the full SQL output into test results.

  • I am fairly newbie to the Postgres ecosystem. Explain me like I am 5 how this is better than TAP - what pains precisely this addresses

  • This is great. Good to see standardized testing improvements to the pg_regress add-on. YAML does better than JSON when it comes to readability. To an extent, TOML as well.

  • Look like an interesting approach to handling YAML.

  • How does this compares to pgTAP? I've been using pgTAP for a long time, how is this better?

  • As much as I don’t prefer YAML, this is a very good use case for it.

  • Looks interesting Yurii!