una poner nombre dinamico consulta columna cambiar cabecera sql postgresql automation sql-update ddl

poner - nombre de columna dinamico sql



Cambiar el nombre de varias columnas en PostgreSQL (2)

No puedes hacer eso.

Todas las acciones, excepto RENAME y SET SCHEMA, se pueden combinar en una lista de modificaciones múltiples para aplicar en paralelo.

La forma más eficiente es usar ActiveRecord.

Mi tabla tiene un grupo de columnas en el siguiente formato:

_settingA _settingB _settingB

Y quiero cambiarles el nombre simplemente para agregar un prefijo de la siguiente manera:

_1_settingA _1_settingB _1_settingC

¿Cuál es la forma más rápida / más eficiente de lograr esto?

EDITAR: Debo agregar que tengo muchas más de tres columnas para cambiar el nombre de esta manera. Si tuviera solo tres, lo haría manualmente uno por uno. Y gracias por el votante quienquiera que seas.


No hay un solo enfoque de comando. Obviamente, puede escribir varios comandos para RENAME por su cuenta, pero permítame introducir alguna mejora :) Como dije en esta respuesta

... para todas esas operaciones de administración masiva, podría usar las tablas del sistema PostgreSQL para generar consultas en lugar de escribirlas a mano

En tu caso sería:

SELECT ''ALTER TABLE '' || tab_name || '' RENAME COLUMN '' || quote_ident(column_name) || '' TO '' || quote_ident( ''_1'' || column_name) || '';'' FROM ( SELECT quote_ident(table_schema) || ''.'' || quote_ident(table_name) as tab_name, column_name FROM information_schema.columns WHERE table_schema = ''schema_name'' AND table_name = ''table_name'' AND column_name LIKE ''/_%'' ) sub;

Eso te dará un conjunto de cadenas que son comandos SQL como:

ALTER TABLE schema_name.table_name RENAME COLUMN "_settingA" TO "_1_settingA"; ALTER TABLE schema_name.table_name RENAME COLUMN "_settingB" TO "_1_settingB"; ...

No es necesario usar table_schema en la cláusula WHERE si su tabla está en esquema public . También recuerde usar la función quote_ident() - lea mi respuesta original para más explicación.

Editar:

Cambié mi consulta, por lo que ahora funciona para todas las columnas con el nombre que comienza con guión bajo _ . Debido a que el guión bajo es un carácter especial en la coincidencia de patrones de SQL, debemos evitarlo (usando / ) para encontrarlo de manera práctica.