hasura를 이용해 분산시스템을 구성하다보면, metadata DB를 하나로 통합해야할 때가 있다.
그러나 막상 metadata DB로 지정한 데이터베이스에 들어가보면, 어떠한 데이터도 들어있지 않음을 알 수 있다.
본인의 경우 다음과 같이 metadata DB를 설정해두었다.
HASURA_GRAPHQL_METADATA_DATABASE_URL: postgres://hasura_connector@company.cluster-gabqpvs5581.ap-northeast-1.rds.amazonaws.com:5432/hasura_metadata
해당 DB에 접근해보았다.
template1=> \dt
Did not find any relations.
그러나 어떠한 테이블도 존재하지 않았다.
template1=> SELECT datname FROM pg_database;
datname
-----------
template0
rdsadmin
postgres
hasura_metadata
template1
혹시나 다른 데이터베이스를 생성한 것 아닐까 확인해보았지만, 데이터베이스가 추가로 생성된 것은 없었다.
Hasura는 일반적으로 사용하는 Public 스키마가 아닌 hdb_catalog
라는 새로운 스키마에 메타데이터를 저장한다.
hasura_metadata=> \dn
List of schemas
Name | Owner
-------------+--------
hdb_catalog | hasura
public | hasura
(2 rows)
해당 스키마에서 테이블을 이용하기 위해서는 다음과 같이 현재 스키마를 Public에서 hdb_catalog
로 변경해주어야한다.
SET search_path TO hdb_catalog;
그런 다음 테이블을 조회해보면 Hasura의 metadata가 저장되는 테이블들을 볼 수 있게 되었다.
template1=> \dt
List of relations
Schema | Name | Type | Owner
-------------+-------------------------------------+-------+--------
hdb_catalog | hdb_action_log | table | hasura
hdb_catalog | hdb_cron_event_invocation_logs | table | hasura
hdb_catalog | hdb_cron_events | table | hasura
hdb_catalog | hdb_metadata | table | hasura
hdb_catalog | hdb_scheduled_event_invocation_logs | table | hasura
hdb_catalog | hdb_scheduled_events | table | hasura
hdb_catalog | hdb_schema_notifications | table | hasura
hdb_catalog | hdb_version | table | hasura
(8 rows)
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.