DBから重複してるレコードのみ抽出する(postgreSQL

Close article

感動した!
「重複を除いて」はググたらたくさん出てくるけど、「重複のみ」情報はちょっと少なかった気がする。
▼会社テーブル内で、複数社を担当している担当者id(main_user_id)を取得する

select main_user_id
from company_table
where delete_flag = 0
group by main_user_id having count(main_user_id) > 1

postgreSQLで確認。たぶんMySQLでも動く(未確認)

Comment : 0

「postgreSQL」alterめんどくさい

Close article

今の案件のDBのバージョンが古いからなんか、
自分がposgreに慣れてないだけなんか、
posgre自体が使いにくいだけなんか・・・
とにかく、めんどくさい。(ちなみに7.4・・・古っ)
とりあえず型の変更ができへん。ただこれは
なんかバージョン8以降はできるらしいけど。
varchar(10)からvarchar(16)に変更しよと思ったら
新たに16のカラム作って、データコピーして、
元カラム削除して、新カラムをリネームとか・・・。
他にも、カラムの追加がめんどくさい
たとえば

# alter table m_customer add column customer_type_id integer not null default 9;

特に何の変哲も無いクエリ。がしかし、流してみると、↓

ERROR: adding columns with defaults is not implemented
HINT: Add the column, then use ALTER TABLE SET DEFAULT

って怒られる。
defaultを外してみたりしても、ことごとく怒られる。
 最終的に、・・・・↓

# alter table m_customer add column customer_type_id integer ;
# alter table m_customer alter column customer_type_id set default 9 ;
# update m_customer set customer_type_id = 9 ;
# alter table m_customer alter column customer_type_id set not null ;

・プレーンなカラムを追加
・default設定
・既存データをupdate
・not null成約つけちゃう
MJK !?
よくみると日本postfreSQLユーザ会の日本語ドキュメントに書いてある

現在の実装では、新規列のデフォルト句と制約句は無視されます。
後で ALTER TABLE の SET DEFAULT を使用してデフォルト句を設定することができます。
(また、 UPDATE を 使用して、新しいデフォルト値で既存の行を更新する必要がでてきます。)

ん、「現在の実装では」って何やろ。
もしかしたら最新バージョンやったらもと手軽にできるとか・・・
調べようと思ったけど断念。とりあえず7.4ではこうせなアカンみたい。
う~ん、やっぱドキュメントはちゃんと読まなあかんなぁ。

Comment : 0
↑ return to top of page
blog comments powered by Disqus