我想使用 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