web-dev-qa-db-ja.com

PostgreSQLで列のデータ型をテキストから整数に変更する

次のクエリを使用して、列のデータ型をテキストから整数に変更していますが、エラーが発生します。

 alter table a.attend alter column terminal TYPE INTEGER ;

エラー:列「ターミナル」は整数型に自動的にキャストできません

13
Newbie
create table test(id varchar );
insert into test values('1');
insert into test values('11');
insert into test values('12');

select * from test

 --Result--
 id
 character varying
--------------------------
 1
 11
 12

上記の表から、id列にデータ型– character varyingを使用したことがわかります。しかし、私は常にintegersidとして与えているので、それは間違いでした。したがって、ここでvarcharを使用することは悪い習慣です。それでは、列のタイプをintegerに変更してみましょう。

ALTER TABLE test ALTER COLUMN id TYPE integer;

しかし、それは戻ります:

エラー:列「id」を整数型SQL状態に自動的にキャストすることはできません:42804ヒント:USING式を指定して変換を実行してください

つまり、データがすでに列にあるため、単純にデータ型を変更することはできません。データはcharacter varyingタイプであるため、整数のみを入力しましたが、Postgresはそれを整数として期待できません。したがって、Postgresが示唆したように、USING式を使用してデータを整数にキャストできます。

ALTER TABLE test ALTER COLUMN id  TYPE integer USING (id::integer);

できます。


だからあなたは使うべきです

alter table a.attend alter column terminal TYPE INTEGER  USING (terminal::integer) ;
27
Vivek S.