次のクエリを使用して、列のデータ型をテキストから整数に変更していますが、エラーが発生します。
alter table a.attend alter column terminal TYPE INTEGER ;
エラー:列「ターミナル」は整数型に自動的にキャストできません
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
を使用したことがわかります。しかし、私は常にintegers
をid
として与えているので、それは間違いでした。したがって、ここで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) ;