2010-12-17 14 views
10

He cambiado la longitud de columna manualmente en mi base de datos anterior.cómo obtener el tamaño y el tipo de columna a través de mi base de datos en PostgreSQL

Pero después de crear una nueva base de datos a través de HQL está creando varchar(255) y necesito hacerlo más largo.

Necesito encontrar la columna de la tabla que debo cambiar?

Puedo encontrarlo manualmente pero ahora tengo alrededor de 200 tablas y necesito una consulta para hacer esto.

¿Cómo puedo obtener el tipo de columna y su longitud en Postgres usando una consulta SQL?

+3

En Postgresql, puede usar "varchar" (sin longitud) o "text" (también sin longitud) para crear un campo de texto que maneje la longitud que el texto sea. Rara vez se necesitan campos de texto de ancho fijo en Postgreql, ya que maneja cadenas de cualquier longitud con gracia y eficiencia. –

+1

sí, tienes razón, no hay diferencia en el rendimiento sobre el tamaño de los datos –

Respuesta

24

Los INFORMATION_SCHEMA tablas le ayudarán aquí:

select * 
from INFORMATION_SCHEMA.COLUMNS 

Puede examinar los table_name, column_name, data_type y character_maximum_length columnas del conjunto de resultados.

1

Tropezamos con esta publicación anterior. Sobre la base de la respuesta de RedFilter aquí es la consulta a la pregunta original:

select table_name, 
     column_name 
from INFORMATION_SCHEMA.COLUMNS 
where data_type = 'character varying' 
    and character_maximum_length = 200 

ponerla junto con la sintaxis de modificación de tabla de:

ALTER TABLE X ALTER COLUMN Y TYPE text; 

Puede generar todos los comandos que necesita mediante la ejecución de esta consulta:

select 'ALTER TABLE ' || table_name || ' ALTER COLUMN ' || column_name || ' TYPE text;' 
from INFORMATION_SCHEMA.COLUMNS 
where data_type = 'character varying' 
    and character_maximum_length = 200; 

Espero que esto ayude a alguien en el futuro, o al menos les ahorre algo de tiempo!

Cuestiones relacionadas