Saltar al contenido

¿Cómo corrijo este valor demasiado largo para que el tipo de carácter varíe (5)?

Bienvenido a nuestro sitio web, ahora hallarás la respuesta a lo que estás buscando.

Solución:

Entonces, primero, ¿cuál es la diferencia?

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

Aquí está la salida

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

Asi que..

  1. San Francisco tiene tres caracteres más.
  2. Ambos tienen más de 5 caracteres.
  3. Ese no puede ser el problema.

Y además, si Cincinnati estaba en un varchar(5)tendría que quedar truncado.

entonces el problema es tuyo cityid. Está varchar(5). probablemente quieras que sea un int de todos modos, será más compacto y más rápido. Asi que ALTER la mesa y arreglarlo.

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

Como nota al margen… tal vez algún día PostgreSQL diga los nombres de las columnas en los mensajes de error. hasta entonces, al menos, es más detallado que SQL Server.

los raíz del problema es INSERT sin lista de columnas de destino

– que es una forma popular de pegarte un tiro en el pie. Solo use este atajo de sintaxis si sabe exactamente lo que está haciendo.

el manual sobre INSERT:

Los nombres de las columnas de destino se pueden enumerar en cualquier orden. Si no se proporciona ninguna lista de nombres de columna, el valor predeterminado es todas las columnas de la tabla en el orden declarado; o el primero norte nombres de columna, si solo hay norte columnas suministradas por el VALUES cláusula o
consulta. Los valores proporcionados por el VALUES cláusula o consulta están asociadas con la lista de columnas explícita o implícita de izquierda a derecha.

los curar: enumera las columnas de destino explícitamente.

INSERT INTO cities (cityname, state)  -- target columns!
VALUES ('San Francisco','CA');

Esto es asumiendo que cityid puede ser NULL o tiene una columna predeterminada.

Normalmente, la mesa debería se parece a esto:

CREATE TABLE city  -- personal advice: use singular terms for table names
   city_id  serial PRIMARY KEY
 , cityname text NOT NULL
 , state    text NOT NULL  -- REFERENCES state(state_id)
);

Lo ideal es que también tengas una mesa state una lista de todos los estados posibles y un FOREIGN KEY referencia a ello.

Sobre serial:

  • Renombrar de forma segura y limpia las tablas que utilizan el servidor principal en serie key columnas en Postgres?

Reseñas y valoraciones

Si sostienes algún reparo y forma de renovar nuestro escrito eres capaz de añadir un paráfrasis y con mucho placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *