2012-09-18 27 views
6

A veces mis comandos en psql parecen no tener ningún efecto. ¿Alguna idea de por qué?En psql, ¿por qué algunos comandos no tienen ningún efecto?

A continuación es la lista de todas las tablas de la base de datos library_development:

library_development => \ d

   List of relations 
Schema |  Name  | Type | Owner 
--------+-------------------+-------+---------- 
public | Pavan    | table | postgres 
public | schema_migrations | table | sai 
(2 rows) 

Después de esto me cayó la tabla Pavan usando:

library_development-> drop table Pavan 

Pero La tabla no se elimina y sus espectáculos como se muestra:

library_development=> \d 
       List of relations 
Schema |  Name  | Type | Owner 
--------+-------------------+-------+---------- 
public | Pavan    | table | postgres 
public | schema_migrations | table | sai 
(2 rows) 

también:

  1. estoy usando PostgreSQL en Windows. ¿Hay algún comando para borrar la consola (como cl scr presente en Oracle)?

  2. ¿Hay algún concepto de "compromiso" que deba realizar en Postgresql cuando trabajo con scripts DML?

+0

tratar de terminar con punto y coma 'tabla de la gota Pavan;' – edze

+0

Al publicar este tipo de preguntas por lo general es una buena idea mencionar su versión de PostgreSQL. Sin embargo, +1 para mostrar lo que está sucediendo claramente. –

Respuesta

14

Las declaraciones terminan con punto y coma.

En psql, presionar enter 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 se encuentra 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 pulsar Intro sin un punto y coma, los cambia a regress-# y no realiza ninguna acción. No hay tabla sometable, por lo que si la sentencia se hubiera ejecutado, se informaría un error.

A continuación, consulte el uso de \r en la siguiente línea? Eso borra el buffer de consulta. Observe que la solicitud cambia de nuevo a regress=# cuando se borra el búfer, ya que ya no hay una declaración parcial almacenada en búfer.

Esto muestra cómo los estados pueden ser divididos en líneas:

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

Lo confuso es que los comandos psql barra invertida como \d son-salto de línea terminada, no punto y coma terminado, por lo que hacer plazo si se pulsa Enter . Eso es útil cuando quiere (por ejemplo) ver una definición de tabla al escribir una declaración, pero es un poco confuso para los recién llegados.

En cuanto a sus preguntas adicionales:

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

  2. DDL en PostgreSQL es transaccional. Puede BEGIN una transacción, emitir un poco de DDL y COMMIT la transacción para que tenga efecto. Si no hace su DDL en una transacción explícita, entra en vigencia inmediatamente.

+0

Muchas gracias por una explicación clara. – Pawan

Cuestiones relacionadas