1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ビジネスエンジニアリング株式会社Advent Calendar 2024

Day 9

【PostgreSQL】ビュー変更時の注意点(CREATE OR REPLACE VIEW)

Last updated at Posted at 2024-12-08

TL;DR

  • PostgreSQLでビューを置換(CREATE OR REPLACE VIEW)するときに、既存のビュー定義の結果列の定義が変更されているとエラーになる(Oracle だと変更できる)
  • この時のエラーメッセージに ALTER VIEW を使うように促されるが、DROP して CREATE VIEW する方法もある

はじめに

弊社では、Oracle・PostgreSQLの二つのDBに対応した生産管理パッケージを開発しています。
少し前、テーブルに項目追加し、既存のビューにも項目を追加する対応をしました。
CREATE OR REPLACE VIEW の 構文を使って ビュー の置換を行おうとしたのですが、少し困ったので、こちらの記事で内容を共有します。

発生したエラーと原因

CREATE OR REPLACE VIEW を実行したところ以下のようなエラーが発生しました。

cannot change name of "OldColumn" to "NewColumn"
HINT: Use ALTER VIEW...RENAME COLUMN ... to change name of view column instead

※ PostgreSQLバージョン:14.6

PostgreSQLのCREATE OR REPLACE VIEW 文では、結果列の型または名前が違うと置換できないことが原因のようです。
Oracleでは、同様の構文で動作したので、少し沼ってました...

対応

エラーメッセージには ALTER VIEW...RENAME COLUMN ... を使えと書いてあります。
しかし、VIEW を DROP して CREATE VIEW することでも同様の操作ができます
私は、DROP して CREATE VIEW する方法を採用しました。理由は次の2つです。

  • 学習コストが少ない
  • Oracle と同じ書き方ができる
    • Oracle は ALTER VIEW で結果列の定義変更ができない

参考

以下の記事が大変参考になりました。ありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?