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..
- San Francisco tiene tres caracteres más.
- Ambos tienen más de 5 caracteres.
- 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 elVALUES
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.