我想使用 PostgreSQL Cheat-SQL 来查看数据库架构

    • あるWebサービスの開発メモ・目次ページに戻る

 

    あるWebサービスの開発メモ・PostgreSQL チートに戻る

我想做的事情

我希望通过使用 SQL 从 PostgreSQL 中获取表清单、每个表的列清单和主键信息。

在 PostgreSQL 中,您可以通过 psql 终端执行命令来进行数据库操作。

由于 Supabase 的 GUI 只能通过 SQL 编辑器进行 SQL 的输入,因此我们正努力通过 SQL 完成任务。

获取表格列表

当您在Supabase的SQL编辑器中输入以下内容时

select schemaname, relname from pg_stat_user_tables order by schemaname, relname;

这个 SQL 语句只要在 PostgreSQL 中使用,不需要做任何修改就可以直接执行。

以下将返回

schemanamerelnameauthaudit_log_entriesauthidentitiesauthinstancesauthrefresh_tokensauthschema_migrationsauthusersgraphql_fieldgraphql_typegraphqlentitygraphqlentity_columngraphqlentity_unique_columnsgraphqlrelationshipgraphqlschema_versionpubliccatspubliccommentspublicpostspublicprofilespublicrepliespublicvotesrealtimeschema_migrationsrealtimesubscriptionstoragebucketsstoragemigrationsstorageobjects

在公共模式中,已经注册了在开发过程中定义的表格。

只需确认公共模式时,请添加 where schemaname = ‘public’ 并执行插入操作。

select schemaname, relname
  from pg_stat_user_tables
 where schemaname = 'public'
 order by schemaname, relname ;
schemanamerelnamepubliccatspubliccommentspublicpostspublicprofilespublicrepliespublicvotes

获取列的列表

让我们尝试获取cats表的列列表。

select column_name, ordinal_position, data_type
  from information_schema.columns
 where table_schema = 'public' and table_name = 'cats'
 order by ordinal_position;

在第3行中,指定了table_schema和table_name。

以下的回应已经被返回

column_nameordinal_positiondata_typeid1uuidcreated_at2timestamp with time zoneupdated_at3timestamp with time zoneuser_id4uuidname5textpost_cnt6numericcom_cnt7numericreply_cnt8numericyoyaku9booleandel10booleansname11textdisporder12numeric

主键的定义

select
	ccu.column_name as COLUMN_NAME
from
	 information_schema.table_constraints tc
	,information_schema.constraint_column_usage ccu
where
  tc.constraint_schema='public'
  and
	tc.table_name='cats'
  and
	tc.constraint_type='PRIMARY KEY'
	and
	tc.table_catalog=ccu.table_catalog
	and
	tc.table_schema=ccu.table_schema
	and
	tc.table_name=ccu.table_name
	and
	tc.constraint_name=ccu.constraint_name;

在这个句子中,第一个参数指定了schema,第二个参数指定了table_name。

已经返回了以下内容。

column_nameiddisporder
广告
将在 10 秒后关闭
bannerAds