Postgresql

對於類型字元變化(5),如何更正此值太長?

  • December 29, 2016

我創建了一個小型開發數據庫以供練習。它有一個cities帶有列cityname和的表state。裡面有“cityname辛辛那提”,長名字對嗎?

mytestdb=# SELECT * FROM cities;
cityid |  cityname  | state
--------+------------+-------
12345  | Cincinnati | Ohio
(1 row)

我不清楚在嘗試添加“舊金山”時如何以及為什麼會收到此錯誤消息。

mytestdb=# INSERT INTO cities VALUES ('San Francisco','CA');
ERROR:  value too long for type character varying(5)

所以首先,有什麼區別..

SELECT x, length(x)
FROM ( VALUES
 ('Cincinnati'),
 ('San Francisco')
) AS t(x);

這是輸出

      x       | length 
---------------+--------
Cincinnati    |     10
San Francisco |     13

所以..

  1. 舊金山長了三個字元。
  2. 他們都超過5個字元。
  3. 那不可能是問題。

而且,如果Cincinnati在 a 中varchar(5),它必須被截斷。

所以問題出在你的cityid. 它是varchar(5)。你可能希望它成為一個int無論如何 - 它會更緊湊和更快。所以ALTER表並修復它。

ALTER TABLE cities
 ALTER COLUMN cityid SET DATA TYPE int
 USING cityid::int;

作為旁注……也許有一天PostgreSQL會在錯誤消息中說出列名。在那之前,至少它比 SQL Server 更冗長

引用自:https://dba.stackexchange.com/questions/159380