sql >> Base de Datos >  >> RDS >> PostgreSQL

En psql, ¿por qué algunos comandos no tienen efecto?

Las sentencias terminan con punto y coma.

En psql , al presionar Intro sin punto y coma continúa la instrucción en la siguiente línea, agregando lo que escribió al búfer de consulta en lugar de ejecutarlo. Notará que el aviso cambia de dbname=> a dbname-> para indicar que estás en una línea de continuación.

regress=> DROP TABLE sometable
regress-> \r
Query buffer reset (cleared).
regress=> DROP TABLE sometable;
ERROR:  table "sometable" does not exist
regress=> 

Observe cómo después de presionar Intro sin un punto y coma, el aviso cambia a regress-# y no se toma ninguna acción. No hay tabla sometable , por lo que si la declaración se hubiera ejecutado, se informaría un error.

A continuación, vea el uso de \r en la siguiente línea? Eso borra el búfer de consultas. Observe que el indicador vuelve a cambiar a regress=# cuando se borra el búfer, ya que ya no hay una declaración parcial almacenada en el búfer.

Esto muestra cómo las declaraciones se pueden dividir en líneas:

regress=> DROP TABLE
regress-> sometable
regress-> ;
ERROR:  table "sometable" does not exist

Lo confuso es que psql comandos de barra invertida como \d terminan en salto de línea, no en punto y coma, por lo que hacen ejecuta cuando presionas enter. Eso es útil cuando quiere (digamos) ver una definición de tabla mientras escribe una declaración, pero es un poco confuso para los recién llegados.

En cuanto a sus preguntas adicionales:

  1. Si hay un comando de "pantalla clara" en psql para Windows aún no lo he encontrado. En Linux solo uso control-L, igual que cualquier otro programa que use readline. En Windows \! cls funcionará.

  2. DDL en PostgreSQL es transaccional. Puedes BEGIN una transacción, emitir DDL y COMMIT la transacción para que surta efecto. Si no realiza su DDL en una transacción explícita, entrará en vigencia de inmediato.