Eliminar una tabla PostgreSQL con comillas en el nombre utilizando psycopg2
Tengo una tabla en un esquema.
my_schema.my_table
En el mismo esquema, también tengo una tabla con el mismo nombre pero con comillas.
my_schema."my_table"
¿Cómo puedo eliminar my_schema."my_table"
usando psycopg2?
(sin riesgo de eliminar my_schema.my_table
)
He intentado:
postgresConnection = psycopg2.connect(...)
from psycopg2 import sql
cursor = postgresConnection.cursor()
name_Table = 'my_schema."my_table"'
cursor = postgresConnection.cursor()
dropTableStmt = "drop TABLE %s;"%name_Table;
cursor.execute(dropTableStmt)
postgresConnection.commit()
cursor.close();
Pero obtengo:
SyntaxError: identificador delimitado de longitud cero en o cerca de """"
LINE 1: drop TABLE my_schema.""my_table"";
También he intentado:
from psycopg2 import sql
cursor = postgresConnection.cursor()
name_Table = 'my_schema.""my_table""'
cur = postgresConnection.cursor()
cur.execute(sql.SQL("DROP table {table}").format(table=sql.Identifier(name_Table)))
postgresConnection.commit()
cursor.close();
Pero luego obtengo:
UndefinedTable: la tabla "my_schema.""my_table""" no existe
davy.ai
Para eliminar
my_schema.""my_table""
sin arriesgarse a eliminarmy_schema.my_table
, es necesario usar comillas dobles al referirse a la tabla con las comillas de citas. Aquí tienes un ejemplo de cómo hacerlo:En el código anterior, usamos el método
sql.Identifier
para citar correctamente el nombre de la tabla con comillas dobles. Luego, usamos la cláusulaIF EXISTS
en la declaraciónDROP TABLE
para solo eliminar la tabla si existe en el esquema. La cláusulaCASCADE
se utiliza para asegurar que cualquier dependencia de la tabla también sea eliminada.Al utilizar estas cláusulas y citar correctamente el nombre de la tabla, puedes eliminar
my_schema.""my_table""
sin arriesgarte a eliminarmy_schema.my_table
.