一年多前,我在六台计算机上安装了PostgreSQL。在其中一台计算机上,我从CSV文件导入了2 gig的人口普查数据。
从历史上看,我刚刚使用过平面文件,但在这种情况下,文件太大了,他们会扼杀我的分析软件。我一般都是PostgreSQL和关系数据库的新手,我有一个非常基本的初学者问题:我会使用什么软件(例如pgAdmin III)以及在每台机器上快速回答以下问题的内容和命令: / p>
PostgreSQL是否仍在每台机器上安装并运行?
(如果1为是)相关机器是否安装了任何非捆绑表或数据?
(如果2为是)如何生成已安装表格的摘要说明?
就摘要描述而言,我希望表名,列名列表,每个列的数据类型,每个表中的行数或记录数,以及可能的任何其他数据库相关事实该列是键还是索引。
我主要在Windows 7& 8,虽然我在一台计算机上安装了虚拟Ubuntu macine。
答案 0 :(得分:2)
用于查找输出的方法取决于每台计算机上的操作系统。
在Linux主机上,你可以使用它:
ps -ef | grep postgres
如果您看到名为postgres的进程,则安装并运行postgresql。
如果没有,它可能已安装但未运行。您可以检查发行版的软件包管理系统以检查它是否已安装,例如在基于RPM的系统上:
rpm -qa "*postgres*"
在Windows计算机上,您可以使用任务管理器查看它是否正在运行。要检查是否已安装,请进入控制面板“程序和功能”选项。
通过非捆绑我假设您指的是安装系统时创建的系统目录以外的表或数据。
我的偏好是通过命令行psql
界面进行交互。获得psql提示后,您可以使用各种“反斜杠命令”来检查数据库。
要打开psql命令 - 您需要适当的凭据。详细信息将取决于您在安装时的配置方式。如果您正在使用Linux,并且您具有root访问权限,那么最简单的方法是首先使用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".
要列出此数据库中存在的所有表,包括系统目录,请使用\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)
Schema的'information_schema'和'pg_catalog'中列出的表不是用户表。 pg_catalog包含数据库用于跟踪数据库中所有内容的内部信息,information_schema包含有关数据库的信息表,这些表由SQL标准标准化。在我的例子中,'public'模式中有一些表是实际的用户表。
要查看一个或多个表的完整描述:
harmic=# \d public.aaa
Table "public.aaa"
Column | Type | Modifiers
--------+---------+-----------
a | integer |
b | text |
上面的普通表有两列名为a和b,分别是整数和文本类型。
您可以使用通配符来为匹配的表格打印此列表,例如:
harmic=# \d public.*
您可以通过执行以下命令获取每个表中存在的确切行数:
SELECT count(1) FROM aaa;
(其中aaa是表名)。
为每个表执行此操作可能既缓慢又乏味。您可以通过检查pg_catalog中的一些表来获得所有表中行数的近似值,如下所示:
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;
答案 1 :(得分:1)
问题1:你在运行什么操作系统?如果它是合理的(* nix),请尝试在其中任何一个的终端中运行psql
。这肯定会告诉你psql是否正在运行。是否安装了postgres是一个完全不同的问题。确定具体情况(你有什么操作系统?)。
问题2:我不熟悉捆绑表。但是,pgAdmin提供的GUI的简单检查将是您最好的选择。什么是捆绑?
问题3:生成一系列表的摘要的最佳方法是运行原始sql :) 以下内容将回答您描述的大部分需求。连接到psql并运行如下所示的内容:
connect <database_name>
\d
(将列出数据库中的所有表格)
\d <tablename>
('描述'表格)
select count(*) from <tablename>
(返回表格中的总行数。)
这是postgres的最佳地点:http://www.postgresql.org/docs/
血腥乏味的阅读,但非常简单而且非常重要。
祝你好运!