Как использовать "\dt" в cursor.execute() для получения таблиц в PostgreSQL? (Django)

В Django я пытаюсь использовать \dt в cursor.execute() для получения таблиц в PostgreSQL, как показано ниже:

# "views.py"

from django.http import HttpResponse
from django.db import connection

def test(request):
    cursor = connection.cursor()
    cursor.execute('''\dt''') # Here
    row = cursor.fetchone()
    print(row)
    
    return HttpResponse("Test")

Но, я получил ошибку ниже:

django.db.utils.ProgrammingError: syntax error at or near "\"
СТРОКА 1: \dt

Итак, я заменил cursor.execute('''\dt''') на cursor.execute('''\\dt'''), как показано ниже:

# "views.py"

from django.http import HttpResponse
from django.db import connection

def test(request):
    # ...    
    cursor.execute('''\\dt''') # Here
    # ...    
    return HttpResponse("Test")

Но, я все еще получаю ошибку ниже:

django.db.utils.ProgrammingError: syntax error at or near "\"
СТРОКА 1: \dt

Итак, как мне использовать \dt в cursor.execute() для получения таблиц в PostgreSQL?

Вы не можете использовать команду \dt в качестве запроса postgresql. \dt - это команда psql на стороне клиента. PostgreSQL может обрабатывать только команды SQL (например, SELECT, INSERT, ALTER, ... .

).

Но есть какой-то способ:

  1. выполните psql с параметром -E. Это означает echo all,
  2. .
  3. выполнить выбранную команду с обратной косой чертой (например, \dt)
  4. psql выводит результат (и SQL-запрос, созданный для получения результата)
  5. выполните из Django этот запрос

Вы можете перечислить таблицы, используя обычный SQL, без использования psql.

cursor.execute('''
select *
from pg_catalog.pg_tables
where schemaname = '<your_schema_name>';
''')
Вернуться на верх