前提
お世話になります。
自作のメモアプリにて以前はMySQLを接続していたのですが、この度PostgreSQLに移行することになりました。
今まで使用していたMySQLのテーブルには以下のように定義したカラムが存在しており、PostgreSQLでもこれと同様に機能するカラムを作りたいと考えています。
MySQL
1ALTER TABLE memos ADD modified_stamp VARCHAR(15) GENERATED ALWAYS AS (DATE_FORMAT(modified, '%b %d %y %k:%i')) STORED;
調べてみたところTo_charという関数を見つけたため、以下のように定義してみたところ、「生成式は不変ではありません」というエラーが起こり上手くいきませんでした。
PostgreSQLで試したコマンドとそのエラー
1// 実行コマンド 2ALTER TABLE memos ADD modefied_stamp VARCHAR(15) GENERATED ALWAYS AS (To_char(modified, 'Mon DD YY HH24:MI')) STORED; 3// エラー文 4ERROR: 生成式は不変ではありません
検索してみたのですが、このエラーについての情報がほとんど出回っておらず、対処法を見つけることができませんでした。'GENERATED ALWAYS AS ~ STRED'という書き方自体はPostgreSQLにも存在しており、見たところ書式も間違ってはいないようなのですが……。
SELECT時に指定すればいい話ではあるのですが、諸事情があり難しいです。
このエラーを解決する方法はありますか?
もしくは、同様の結果を望める代替の方法はあるでしょうか。
お詳しい方、お力添えをいただけますと幸いです。
該当のテーブル
MySQLのmemosテーブルの構造(今まで使っていたほう)
1mysql> desc memos; 2+----------------+----------------+------+-----+-------------------+-----------------------------------------------+ 3| Field | Type | Null | Key | Default | Extra | 4+----------------+----------------+------+-----+-------------------+-----------------------------------------------+ 5| id | int | NO | PRI | NULL | auto_increment | 6| title | varchar(40) | YES | | Untitled | | 7| content | varchar(16383) | YES | | NULL | | 8| created | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | 9| modified | datetime | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | 10| modified_stamp | varchar(15) | YES | | NULL | STORED GENERATED | 11| is_removed | tinyint(1) | NO | | 0 | | 12| is_locked | tinyint(1) | NO | | 0 | | 13+----------------+----------------+------+-----+-------------------+-----------------------------------------------+ 148 rows in set (0.05 sec)
PostgreSQLのmemosテーブルの構造(新しいカラムを追加したいほう)
1memo_app=# \d memos; 2 テーブル"public.memos" 3 列 | タイプ | 照合順序 | Null 値を許容 | デフォルト 4------------+-----------------------------+----------+---------------+----------------------------------- 5 id | integer | | not null | nextval('memos_id_seq'::regclass) 6 title | character varying(40) | | | 'Untitled'::character varying 7 content | character varying(10485760) | | | 8 created | timestamp without time zone | | not null | CURRENT_TIMESTAMP 9 modified | timestamp without time zone | | not null | CURRENT_TIMESTAMP 10 is_removed | boolean | | not null | false 11 is_locked | boolean | | not null | false 12インデックス: 13 "memos_pkey" PRIMARY KEY, btree (id) 14トリガー: 15 update_tri BEFORE UPDATE ON memos FOR EACH ROW EXECUTE FUNCTION set_update_time()
補足情報(FW/ツールのバージョンなど)
実行環境はWindows11です。
MySQL: v8.0.3
PostgreSQL: v16.1
以下、'GENERATED ALWEIS AS ~ STRED'についての参照↓
https://www.postgresql.org/docs/current/ddl-generated-columns.html
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー