mirror of
https://github.com/postgres/postgres.git
synced 2025-07-14 08:21:07 +03:00
Add support for REFRESH MATERIALIZED VIEW CONCURRENTLY.
This allows reads to continue without any blocking while a REFRESH
runs. The new data appears atomically as part of transaction
commit.
Review questioned the Assert that a matview was not a system
relation. This will be addressed separately.
Reviewed by Hitoshi Harada, Robert Haas, Andres Freund.
Merged after review with security patch f3ab5d4
.
This commit is contained in:
@ -2871,11 +2871,22 @@ psql_completion(char *text, int start, int end)
|
||||
else if (pg_strcasecmp(prev3_wd, "REFRESH") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "MATERIALIZED") == 0 &&
|
||||
pg_strcasecmp(prev_wd, "VIEW") == 0)
|
||||
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews,
|
||||
" UNION SELECT 'CONCURRENTLY'");
|
||||
else if (pg_strcasecmp(prev4_wd, "REFRESH") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "MATERIALIZED") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "VIEW") == 0 &&
|
||||
pg_strcasecmp(prev_wd, "CONCURRENTLY") == 0)
|
||||
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews, NULL);
|
||||
else if (pg_strcasecmp(prev4_wd, "REFRESH") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "MATERIALIZED") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "VIEW") == 0)
|
||||
COMPLETE_WITH_CONST("WITH");
|
||||
else if (pg_strcasecmp(prev5_wd, "REFRESH") == 0 &&
|
||||
pg_strcasecmp(prev4_wd, "MATERIALIZED") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "VIEW") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "CONCURRENTLY") == 0)
|
||||
COMPLETE_WITH_CONST("WITH DATA");
|
||||
else if (pg_strcasecmp(prev5_wd, "REFRESH") == 0 &&
|
||||
pg_strcasecmp(prev4_wd, "MATERIALIZED") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "VIEW") == 0 &&
|
||||
@ -2886,6 +2897,12 @@ psql_completion(char *text, int start, int end)
|
||||
|
||||
COMPLETE_WITH_LIST(list_WITH_DATA);
|
||||
}
|
||||
else if (pg_strcasecmp(prev6_wd, "REFRESH") == 0 &&
|
||||
pg_strcasecmp(prev5_wd, "MATERIALIZED") == 0 &&
|
||||
pg_strcasecmp(prev4_wd, "VIEW") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "CONCURRENTLY") == 0 &&
|
||||
pg_strcasecmp(prev_wd, "WITH") == 0)
|
||||
COMPLETE_WITH_CONST("DATA");
|
||||
else if (pg_strcasecmp(prev6_wd, "REFRESH") == 0 &&
|
||||
pg_strcasecmp(prev5_wd, "MATERIALIZED") == 0 &&
|
||||
pg_strcasecmp(prev4_wd, "VIEW") == 0 &&
|
||||
|
Reference in New Issue
Block a user