Получить все имена таблиц в Redshift - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь получить всю таблицу в базе данных Redshift.

import os
import psycopg2
import sys
import rds_config

def lambda_handler(event, context):

  #for key in os.environ.keys():
  #    print(key)
  #return 0
  REDSHIFT_DATABASE = rds_config.db_name
  REDSHIFT_USER = rds_config.db_username
  REDSHIFT_PASSWD = rds_config.db_password
  REDSHIFT_PORT = rds_config.db_port
  REDSHIFT_ENDPOINT = rds_config.db_endpoint

  QUERY = "SELECT DISTINCT tablename FROM pg_table_def WHERE schemaname = 'public' ORDER BY tablename;"


  try:
    conn = psycopg2.connect(
      database = REDSHIFT_DATABASE,
      user=REDSHIFT_USER,
      password=REDSHIFT_PASSWD,
      port=REDSHIFT_PORT,
      host=REDSHIFT_ENDPOINT)
  except Exception as ERROR:
    print(ERROR)
    sys.exit(1)

  try:
    cursor = conn.cursor()
    print(QUERY)
    print(cursor.execute(QUERY))

    cursor.close()
    conn.commit()
    conn.close()
  except Exception as ERROR:
    print( ERROR)
    sys.exit(1)

Приведенный выше запрос выполняется в RedshiftQuery Editor, но он не выполняется, когда я пытаюсь выполнить его с помощью лямбды.

Я просто хочу прочитать все таблицы в Redshift.

Я не получаю никакой ошибки

print(cursor.execute(QUERY)) печать None

1 Ответ

0 голосов
/ 25 декабря 2018

Полагаю, вы пропустили самые важные строки после выполнения запроса -

rows = cursor.fetchall()

Примерно так:

try:
      # retrieving all tables in my search_path
      cursor.execute("""select tablename from pg_table_def""")
except Exception as err:
      print err.code,err

rows = cursor.fetchall()
for row in rows
    print row

СМ. ДЕМО Суть: https://gist.github.com/jaychoo/4e3effdeed3672173b67

...