如何查PostgreSQL 数据库中所有的表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查PostgreSQL 数据库中所有的表相关的知识,希望对你有一定的参考价值。

参考技术A 1、通过命令行查询
d
数据库
——
得到所有表的名字
d
表名
——
得到表结构
2、通过SQL语句查询
"select
*
from
pg_tables"
——
得到当前db中所有表的信息(这里pg_tables是系统视图)
"select
tablename
from
pg_tables
where
schemaname='public'"
——
得到所有用户自定义表的名字(这里"tablename"字段是表的名字,"schemaname"是schema的名字。用户自定义的表,如果未经特殊处理,默认都是放在名为public的schema下)

如何将 PostgreSQL 数据库中的所有 SMALLINT 列转换为 BOOLEAN?

【中文标题】如何将 PostgreSQL 数据库中的所有 SMALLINT 列转换为 BOOLEAN?【英文标题】:How can I convert all SMALLINT columns in PostgreSQL database to BOOLEAN? 【发布时间】:2017-10-24 17:04:39 【问题描述】:

我使用第三方工具 pgloader 将我的 Django 网站数据库从 MySQL 迁移到 PostgreSQL。但是由于 MySQL 默认将 BOOLEAN 数据存储为 TINYINT(至少在 Django 中是这样),因此它在 PostgreSQL 中被转换为 SMALLINT。现在 Django 显示 smallint 被视为布尔值 的错误。因此,我想将所有 smallint 列转换为布尔值。是否有一个命令可以将单个数据库中所有表中的所有列转换为所需类型?如果我必须为每个表单独执行操作,那也可以。

编辑:

列结构:

public | smallint | default '1'::smallint

这里 public 是列名,smallint 是类型并且有它默认值为 '1'

我使用的代码:

utkarsh@utkarsh-Lenovo-G580:~$ psql -d thakurani -U utkarsh
Password for user utkarsh: 
psql (9.6.3)
Type "help" for help.

thakurani=# alter table topics_topic alter COLUMN public type boolean using(public::text::boolean);                             ERROR:  default for column "public" cannot be cast automatically to type boolean
thakurani=# alter table topics_topic alter COLUMN public type text using(public::text);
ALTER TABLE
thakurani=# alter table topics_topic alter COLUMN public type boolean using(public::boolean);
ERROR:  default for column "public" cannot be cast automatically to type boolean
thakurani=# ALTER TABLE topics_topic ALTER COLUMN public TYPE boolean USING CASE WHEN public = '0' THEN FALSE WHEN public = '1' THEN TRUE END;
ERROR:  default for column "public" cannot be cast automatically to type boolean
thakurani=# 

【问题讨论】:

您是否尝试过简单地更改模型中的类型并让migrations 完成这项工作? 【参考方案1】:

您需要双重转换 - 首先将 int 转换为文本,然后将文本转换为布尔值

这是一个例子:

t=# create table s181(i smallint default 1::smallint);
CREATE TABLE
t=# insert into s181 values (0),(1);
INSERT 0 2
t=# alter table s181 alter COLUMN i drop default;
ALTER TABLE
t=# alter table s181 alter COLUMN i type boolean using(i::text::boolean);
ALTER TABLE
t=# alter table s181 alter COLUMN i set default true;
ALTER TABLE
t=# \d s181
       Table "public.s181"
 Column |  Type   |  Modifiers
--------+---------+--------------
 i      | boolean | default true

【讨论】:

这给了我一个错误:错误:列“public”的默认值不能自动转换为布尔类型 我可以转换为文本类型,但从文本转换为布尔值会出现与以前相同的错误。 请使用现有的表结构和确切的命令更新您的帖子。 我用命令和列结构编辑了帖子。我认为由于默认值设置为“1”而出现问题。但不知道究竟是为什么。 @UtkarshGarg 已更新以适应您的情况

以上是关于如何查PostgreSQL 数据库中所有的表的主要内容,如果未能解决你的问题,请参考以下文章

navicat制作postgresql业务用户,赋予能删改查权限

navicat制作postgresql业务用户,赋予能删改查权限

49. 访问PostgreSQL数据库增删改查 | 厚土Go学习笔记

无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接口

获取 django 在 postgresql 上运行的所有查询

postgresql查出来的字段长度为啥比实际字段多了4