psql: SELECT * ... excepto una columna

10

Busco una manera simple de seleccionar todas las columnas excepto una en psql.

Con psqlme refiero a la línea de comandos interactiva.

Estaría contento con una herramienta que se expande *a una lista de nombres de columnas citadas. Entonces podría eliminar la columna para eliminar a mano.

Mi pregunta es sobre el uso interactivo de psql. No es un duplicado de preguntas de personas descontentas con el estándar sql y que desean ejecutar algo como "select * -foo".

guettli
fuente
3
No hay uno, lo siento. Puede realizar consultas a information_schematravés de una función pl / pgsql para generar una lista con bastante facilidad, pero de esa manera serían dos consultas.
Craig Ringer
2
La mayoría de las herramientas GUI pueden hacer eso. Pero si desea (o tiene que) apegarse a la línea de comando, tal vez esto ayude: github.com/dbcli/pgcli
a_horse_with_no_name
@a_horse_with_no_name Me gustaría aceptar su "respuesta". ¿Podría publicar una respuesta y explicar el uso de la herramienta pgcli para resolver la pregunta?
guettli
excepto que columna? ¿el último? ¿el primero? O al azar?
BAE
1
@ChengchengPei: no hay desccomando enpsql
a_horse_with_no_name

Respuestas:

4

Para obtener la lista de columnas en el orden predeterminado, sin la columna incorrecta:

SELECT string_agg(quote_ident(attname), ', ' ORDER BY attnum)
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytable'::regclass
AND    NOT attisdropped  -- no dropped (dead) columns
AND    attnum > 0        -- no system columns
AND    attname <> 'bad_column'  -- case sensitive!

O simplemente WHERE attrelid = 'mytable'::regclasssi confía en la ruta de búsqueda para resolver el esquema correcto.

quote_ident() agrega comillas dobles cuando es necesario.

Hice la misma pregunta en 2007 sobre pgsql-general . Era Postgres 8.2 en aquel entonces. Dulces memorias ...

Relacionado:

Erwin Brandstetter
fuente
1
Suena como un elemento de tarea pendiente, para agregar un comando de barra diagonal inversa a psql que emitirá una cadena que es una lista de todas las columnas de una tabla, debidamente citada. Y podría hacer que omita las columnas que se incluyeron como argumentos adicionales para el comando. Tan hipotéticamente \dq thetable bad_column.
jjanes
@jjanes: no estoy seguro de que pueda generar suficiente demanda para convencer a los desarrolladores principales de que asignen la carta gratuita qpara la tarea. ¿Quizás una opción general para toda la familia de \dcomandos para mostrar una lista de nombres concatenados? Me gusta \d- tbl(mnemónico: lo contrario de \d+, que muestra más detalles). Esto permitiría obtener básicamente cualquier lista de objetos desnuda. Tablas de un esquema: \dt- public.*, funciones que comienzan con "f_foo": \df- f_foo*etc - o columnas en una tabla: \d- mytbl. Similar a lo que hace el comando de shell ls...
Erwin Brandstetter
Te doy la recompensa. Pero algo incorporado en psql sería realmente una buena característica. Gracias Erwin :-)
guettli
0

Creo que he encontrado lo que estás buscando pero no lo he probado yo mismo.

Hay un software llamado SequelPro que le permitiría seleccionar los campos de una tabla determinada, pero es solo para MySQL. Por favor lea desde abajo desde algún lugar en el medio de la página:

http://www.sequelpro.com/docs/Working_with_Query_Favorites

Hay otro software llamado PSequel que solo se ejecuta en Mac y afirma que es del tipo SequelPro creado para Postgres:

http://www.psequel.com/

Espero que esto ayude.

Sin consolidar
fuente