私は、次のクエリを使用してマテリアライズド・ビューを作成しています:マテリアライズド・ビューの作成時に列がNULL可能ではないことを示す方法はありますか?
CREATE MATERIALIZED VIEW article_view AS
SELECT
id,
alternative_headline,
article_author_id,
created_at,
description,
headline,
preview_paragraph_image_id,
published_at,
updated_at
FROM article
WHERE
published_at IS NOT NULL
WITH NO DATA;
CREATE UNIQUE INDEX ON article_view (id);
は、私はpublished_at
列がNULL可能ではないことmaterialized-viewで表現することにしたいです。
published_at
列をヌル可能でないと表現したい理由は、データベースのスキーマに基づいてデータベースクエリと型を生成するscaffolding toolを使用しているためです。この特定のケースでは、published_at
が厳密な型チェックエラーを引き起こすNULL可能な列として誤って表現されています。
ザ・は足場ツールは、データベースを記述するために、次のクエリを使用していると述べた。
SELECT
pc1.relname AS "tableName",
pa1.attname AS "columnName",
pg_catalog.format_type (pa1.atttypid, NULL) "dataType",
pc1.relkind = 'm' "isMaterializedView",
NOT(pa1.attnotnull) "isNullable"
FROM
pg_class pc1
JOIN pg_namespace pn1 ON pn1.oid = pc1.relnamespace
JOIN
pg_attribute pa1 ON pa1.attrelid = pc1.oid
AND pa1.attnum > 0
AND NOT pa1.attisdropped
WHERE
pn1.nspname = 'public' AND
pc1.relkind IN ('r', 'm')
あなたのPostgresバージョンは何ですか? – klin
PostgreSQLバージョン9.6 – Gajus
おそらく良い考えは、mview属性ではなく元のテーブルnullableをチェックするでしょうか?私はスキャフォールディングツールを指しています - あなたはポストグルロジックと同期していて、ツールの制約条件をサポートしています。 –