首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用SQL列出Postgres数据库8.1中的所有序列

使用SQL列出Postgres数据库8.1中的所有序列
EN

Stack Overflow用户
提问于 2009-09-29 15:19:57
回答 20查看 231.9K关注 0票数 187

我正在将一个数据库从postgres转换到mysql。

由于我找不到一个能自动完成此任务的工具,因此我将在mysql中将所有postgres序列转换为具有自动增量值的自动增量i。

那么,如何使用查询列出Postgres DB (SQL8.1版本)中的所有序列以及使用它的表、下一个值等信息?

请注意,我不能在8.4版本中使用information_schema.sequences视图。

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2009-10-23 14:28:07

下面的查询给出了所有序列的名称。

代码语言:javascript
复制
SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';

通常,序列被命名为${table}_id_seq。简单的正则表达式模式匹配将为您提供表名。

要获取序列的最后一个值,请使用以下查询:

代码语言:javascript
复制
SELECT last_value FROM test_id_seq;
票数 315
EN

Stack Overflow用户

发布于 2014-11-06 19:31:02

注意,从PostgreSQL 8.4开始,您可以通过以下方式获取有关数据库中使用的序列的所有信息:

代码语言:javascript
复制
SELECT * FROM information_schema.sequences;

由于我使用的是更高版本的PostgreSQL (9.1),并且到处都在搜索相同的答案,所以为了子孙后代和未来的搜索者,我添加了这个答案。

票数 101
EN

Stack Overflow用户

发布于 2009-09-29 16:04:24

使用-E标志启动psql (“回应\d和其他反斜杠命令生成的实际查询”),然后输入\ds命令以列出所有序列。您应该会看到类似下面这样的内容:

代码语言:javascript
复制
# \ds
********* QUERY **********
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'partitioned table' WHEN 'I' THEN 'partitioned index' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('S','')
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
      AND n.nspname !~ '^pg_toast'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
**************************

                     List of relations
 Schema |              Name              |   Type   | Owner 
--------+--------------------------------+----------+-------
 public | assignments_id_seq             | sequence | root
 public | framework_users_id_seq         | sequence | root
 public | lending_items_id_seq           | sequence | root
 public | proxy_borrower_requests_id_seq | sequence | root
 public | roles_id_seq                   | sequence | root
 public | stack_requests_id_seq          | sequence | root
(6 rows)

要检查特定的序列,可以运行\d <sequence name>

代码语言:javascript
复制
# \d lending_items_id_seq
********* QUERY **********

(...about four queries...)

**************************

                    Sequence "public.lending_items_id_seq"
  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
--------+-------+---------+---------------------+-----------+---------+-------
 bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
Owned by: public.lending_items.id
票数 69
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1493262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档