sqlc-dev / sqlc

Generate type-safe code from SQL
https://sqlc.dev
MIT License
13.37k stars 803 forks source link

Renaming a materialized view causes `sqlc generate` to fail #3371

Open JakeCapra opened 6 months ago

JakeCapra commented 6 months ago

Version

1.22.0

What happened?

I have to update the query that backs a materialized view.

To do this, I create a new temporary materialized view, view_2, drop the old view, view_1, and rename the temporary view to the old view's name.

I am renaming the temporary view using alter materialized view view_2 rename to view_1.

When I run sqlc generate, SQLC states that the view_1 does not exist, when in fact it does, it's just been renamed.

For context, I need to create a temporary materialized view, as dropping and recreating a materialized view will block all reads to the view. This is a two-step process, done in separate migrations. Postgres does not support updating a materialized view's query.

Relevant log output

# package db
query.sql:1:1: relation "view_1" does not exist

Database schema

create materialized view view_1 as select x.* from (values(1), (1), (1)) as x;

create materialized view view_2 as select x.* from (values(2), (2), (2)) as x;

drop materialized view view_1;

alter materialized view view_2 rename to view_1;

SQL queries

-- name: SelectView :many
select * from view_1;

Configuration

{
  "version": "2",
  "sql": [{
    "schema": "schema.sql",
    "queries": "query.sql",
    "engine": "postgresql",
    "gen": {
      "go": {
        "out": "db"
      }
    }
  }]
}

Playground URL

https://play.sqlc.dev/p/f5ae38a7ec5718c27c64bbc03eccf3f118b68bfdf5d163a3f9caa4296cdfe5bb

What operating system are you using?

macOS

What database engines are you using?

PostgreSQL

What type of code are you generating?

Go

MattBrittan commented 5 months ago

Note that this appears to impact all views (it's not specific to materialized views) - playground. I've hit this where one migration script renames a view, and then the subsequent one attempts to drop it (with the new name).

Tested with v1.26.0