Postgresql查询以获取序列元数据
Postgresql查询以获取序列元数据
我正在寻找一个查询,可以提供序列的完整元数据。当我在控制台使用下面的查询时,我得到了元数据。
\d+ phonebook_id_seq 序列 "public.phonebook_id_seq" 列名 | 类型 | 值 | 存储 ---------------+---------+---------------------+--------- sequence_name | name | phonebook_id_seq | plain last_value | bigint | 2 | plain start_value | bigint | 1 | plain increment_by | bigint | 1 | plain max_value | bigint | 9223372036854775807 | plain min_value | bigint | 1 | plain cache_value | bigint | 1 | plain log_cnt | bigint | 31 | plain is_cycled | boolean | f | plain is_called | boolean | t | plain
我正在寻找一个能够提供相同输出的查询。我尝试了下面的查询,但是没有得到与上述完整的元数据信息相同的结果。
我尝试了这个查询:
SELECT * FROM information_schema.sequences WHERE sequence_name = 'phonebook_id_seq';
输出:
'postgres','public','phonebook_id_seq','bigint',64,2,0,'1','1','9223372036854775807','1','NO'
从上面的内容中可以看出,问题的出现的原因是在不同版本的PostgreSQL中获取序列元数据的方法不同。在10版本之前,可以通过直接查询序列名来获取序列元数据,例如select * from phonebook_id_seq
。而在10版本及之后的版本中,需要使用pg_sequence
表来获取序列元数据,例如select * from pg_sequence where seqrelid='phonebook_id_seq'::regclass;
。
解决方法是根据不同的版本选择对应的查询语句来获取序列元数据。对于10版本之前的旧版本,使用select * from phonebook_id_seq
来获取序列元数据;对于10版本及之后的版本,使用select * from pg_sequence where seqrelid='phonebook_id_seq'::regclass;
来获取序列元数据。
此外,还可以参考https://www.postgresql.org/docs/current/static/app-psql.html中关于psql命令的说明,通过设置-E
参数来查看实际生成的查询语句,以便研究psql的内部操作。这相当于将变量ECHO_HIDDEN
设置为on
。
根据不同的PostgreSQL版本选择相应的查询语句来获取序列元数据,并可以通过设置-E
参数来查看实际生成的查询语句。