安装在特定计算机上的 PostgreSQL 数据库表的说明

Description of PostgreSQL database tables installed on a particular computer

一年多以前,我在六台计算机上安装了 PostgreSQL。在其中一台计算机上,我从 CSV 文件中导入了 2 g 的人口普查数据。

以前,我只使用平面文件,但在这种情况下,文件太大了,以至于无法使用我的分析软件。一般来说,我对 PostgreSQL 和关系数据库都是新手,我有一个非常基本的初学者问题:我将使用什么软件(例如 pgAdmin III)以及什么和命令来快速回答每台机器上的以下问题:

  1. PostgreSQL 是否仍然安装并且 运行 在每台机器上?

  2. (如果 1 是)有问题的机器是否安装了任何非捆绑的 tables 或数据?

  3. (如果 2 是)我如何生成已安装的 table 的摘要描述?

在摘要描述方面,我希望得到 table 名称、列名列表、每个列的数据类型以及每个 table 中的行数或记录数,以及可能的任何其他与数据库相关的事实,例如该列是键还是索引。

我主要在 Windows 7 和 8 下工作,尽管我在一台计算机上安装了虚拟 Ubuntu 机器。

问题 1:OS 你运行宁是什么?如果它是一个明智的 (*nix),请在其中任何一个的终端中尝试 运行ning psql。那肯定会告诉你 psql 是否是 运行ning。是否安装了 postgres 是一个完全不同的问题。确定那是非常具体的情况(你有什么OS?)。

问题 2:我不熟悉捆绑 table。但简单检查 pgAdmin 提供的 GUI 将是您最好的选择。什么是捆绑?

问题 3:生成一系列 table 的摘要的最佳方法是 运行 原始 sql :) 以下将回答您描述的大部分需求。连接到 psql 和 运行 如下所示:

  • connect <database_name>
  • \d(将列出数据库中所有的table)

  • \d <tablename> ('describes' table)

  • select count(*) from <tablename>(returns中的总行数table。)

这是 postgres 最好的地方:http://www.postgresql.org/docs/

无聊的阅读,但非常简单明了。

祝你好运!

postgreSQL 是否仍然安装并且 运行 在每台机器上?

您用来找出答案的方法将取决于每台机器上的操作系统。

在 Linux 主机上你可以使用这个:

ps -ef | grep postgres

如果您看到名为 postgres 的进程,则说明已安装 postgresql 并且 运行。

如果没有,它可能会安装但不会 运行。您可以检查您的发行版的包管理系统以检查它是否已安装,例如在基于 RPM 的系统上:

rpm -qa "*postgres*"

在 Windows 机器上,您可以使用任务管理器查看它是否 运行。要检查它是否已安装,请进入控制面板 "Programs and Features" 选项。

有问题的机器是否安装了任何非捆绑的 table 或数据?

我认为非捆绑是指 tables 或安装系统时创建的系统目录以外的数据。

我的偏好是通过命令行 psql 界面进行交互。获得 psql 提示后,您可以使用各种 'backslash commands' 检查数据库。

要打开 psql 命令 - 您需要适当的凭据。详细信息将取决于您在安装时的配置方式。如果你碰巧使用 Linux,并且你有 root 访问权限,那么最简单的方法是先 su 到 postgres Linux 用户,在大多数情况下,这将能够直接连接到数据库:

$ sudo su - postgres
$ psql

要查看存在哪些数据库,请使用 \l 命令:

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 harmic    | harmic   | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | 
 postgres  | postgres | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | 
 template0 | postgres | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

数据库 postgres、template0 和 template1 由系统创建,因此在本例中唯一包含用户数据的数据库是 'harmic'。

要连接到数据库,请使用 \c:

postgres=# \c harmic
You are now connected to database "harmic" as user "postgres".

要列出此数据库中存在的所有 table,包括系统目录,请使用 \dt:

harmic=# \dt+ *.*
                                     List of relations
       Schema       |          Name           | Type  |  Owner   |    Size    | Description 
--------------------+-------------------------+-------+----------+------------+-------------
 information_schema | sql_features            | table | postgres | 96 kB      | 
 information_schema | sql_implementation_info | table | postgres | 48 kB      | 
 information_schema | sql_languages           | table | postgres | 48 kB      | 
 information_schema | sql_packages            | table | postgres | 48 kB      | 
 information_schema | sql_parts               | table | postgres | 48 kB      | 
 information_schema | sql_sizing              | table | postgres | 48 kB      | 
 information_schema | sql_sizing_profiles     | table | postgres | 8192 bytes | 
 pg_catalog         | pg_aggregate            | table | postgres | 40 kB      | 
 pg_catalog         | pg_am                   | table | postgres | 40 kB      | 
... etc
 public             | aaa                     | table | harmic   | 16 kB      | 
 public             | entry                   | table | harmic   | 8192 bytes | 
 public             | exams                   | table | harmic   | 8192 bytes | 
(60 rows)

架构的 'information_schema' 和 'pg_catalog' 中列出的 table 不是用户 table。 pg_catalog 包含数据库用于跟踪数据库中所有内容的内部信息,information_schema 包含有关数据库的信息 table,这些信息由 SQL 标准标准化.在我的例子中,'public' 模式中有几个 tables 是实际用户 tables.

如何生成已安装的 table 的摘要描述?

要查看一个或多个 table 的完整说明:

harmic=# \d public.aaa
      Table "public.aaa"
 Column |  Type   | Modifiers 
--------+---------+-----------
 a      | integer | 
 b      | text    | 

上面的简单 table 有两列名为 a 和 b,分别是整数和文本类型。

您可以使用通配符来打印此列表以匹配 tables,例如:

harmic=# \d public.*

您可以通过执行以下命令获得每个 table 中存在的确切行数:

SELECT count(1) FROM aaa;

(其中 aaa 是 table 名称)。

对每个 table 执行此操作可能既缓慢又乏味。您可以通过检查 pg_catalog 中的某些 table 来获得所有 table 中行数的近似值,如下所示:

harmic=# SELECT nspname as schemaname,
harmic-#        relname as tablename,
harmic-#        reltuples as approx_rows 
harmic-# FROM pg_class LEFT JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace WHERE nspname='public' and relkind='r';
 schemaname | tablename | approx_rows 
------------+-----------+-------------
 public     | exams     |           3
 public     | entry     |           2
 public     | aaa       |           2
(3 rows)

请注意,只要分析数据库,显示的行数就会更新。 autovacuum 守护进程有时会自动执行此操作,但您也可以使用命令 ANALYZE;

手动触发它