小编Jon*_*nas的帖子

如何使用 psql 列出所有数据库和表?

我正在尝试学习 PostgreSQL 管理并开始学习如何使用psql命令行工具。

当我使用 登录时psql --username=postgres,如何列出所有数据库和表?

我曾尝试\dddS+但没有列出。我已经用 pgAdmin III 创建了两个数据库和几个表,所以我知道它们应该被列出。

postgresql tools psql command-line

1362
推荐指数
8
解决办法
276万
查看次数

如何使用 psql 为 SQL 查询计时?

我想针对我的 PostgreSQL 数据库对一些 SQL 查询进行基准测试。有什么方法可以使用 SQL 查询时间psql吗?

postgresql benchmark psql

297
推荐指数
3
解决办法
17万
查看次数

如何将值从 PostgreSQL 中的选择查询插入表中?

我有一张桌子items (item_id serial, name varchar(10), item_group int)和一张桌子items_ver (id serial, item_id int, name varchar(10), item_group int)

现在我想在items_verfrom 中插入一行items。是否有任何简短的 SQL 语法来执行此操作?

我试过:

INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item_id = 2);
Run Code Online (Sandbox Code Playgroud)

但我收到一个语法错误:

ERROR:  syntax error at or near "select"
LINE 1: INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item...
Run Code Online (Sandbox Code Playgroud)

我现在尝试:

INSERT INTO items_ver SELECT * FROM items WHERE item_id = 2;
Run Code Online (Sandbox Code Playgroud)

它工作得更好,但我遇到了一个错误:

ERROR:  column "item_group" is of type integer …
Run Code Online (Sandbox Code Playgroud)

postgresql insert

284
推荐指数
3
解决办法
60万
查看次数

如何从 PostgreSQL 获取当前的 unix 时间戳?

Unix 时间戳是自 UTC 时间 1970 年 1 月 1 日午夜以来的秒数。

如何从 PostgreSQL 获取正确的 unix 时间戳?

currenttimestamp.comtimestamp.1e5b.de相比时,我没有从 PostgreSQL 得到预期的时间:

这将返回正确的时间戳:

SELECT extract(epoch from now());
Run Code Online (Sandbox Code Playgroud)

虽然这不会:

SELECT extract(epoch from now() at time zone 'utc');
Run Code Online (Sandbox Code Playgroud)

我住在 UTC +02 时区。从 PostgreSQL 获取当前 unix 时间戳的正确方法是什么?

这将返回正确的时间和时区:

SELECT now();
              now
-------------------------------
 2011-05-18 10:34:10.820464+02
Run Code Online (Sandbox Code Playgroud)

另一个对比:

select now(), 
extract(epoch from now()), 
extract(epoch from now() at time zone 'utc');
              now              |    date_part     |    date_part
-------------------------------+------------------+------------------
 2011-05-18 10:38:16.439332+02 | 1305707896.43933 | 1305700696.43933
(1 …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp

119
推荐指数
2
解决办法
21万
查看次数

如何在 PostgreSQL 中指定新列的位置?

如果我有一个包含列的表:

id | name | created_date
Run Code Online (Sandbox Code Playgroud)

并想添加一列,我使用:

alter table my_table add column email varchar(255)
Run Code Online (Sandbox Code Playgroud)

然后在列之后添加created_date列。

有什么办法可以指定新列的位置吗?例如,我可以在之后添加它name并得到一个表格,如:

id | name | email | created_date
Run Code Online (Sandbox Code Playgroud)

postgresql database-design

106
推荐指数
3
解决办法
12万
查看次数

如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

我有一张桌子:

CREATE TABLE names (id serial, name varchar(20))
Run Code Online (Sandbox Code Playgroud)

我想要那个表中的“最后插入的 id”,而不是RETURNING id在插入时使用。好像有一个函数CURRVAL(),但我不明白如何使用它。

我试过:

SELECT CURRVAL() AS id FROM names_id_seq
SELECT CURRVAL('names_id_seq')
SELECT CURRVAL('names_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用。如何使用currval()获取最后插入的 ID?

postgresql sequence

81
推荐指数
4
解决办法
27万
查看次数

如何在 Mac OS X 上运行 psql?

我使用One click installer在装有 Mac OS X 的计算机上安装了 PostgreSQL 。然后我尝试使用该psql命令访问 PostgreSQL ,但它似乎不可用。

我收到这条消息:

psql
-bash: psql: command not found
Run Code Online (Sandbox Code Playgroud)

我需要安装更多东西吗?或者我如何配置 PostgreSQL 以便我可以在我的计算机上使用它?

postgresql psql installation mac-os-x

76
推荐指数
5
解决办法
24万
查看次数

使用 UUID 或 GUID 作为主键有什么缺点?

我想建立一个分布式系统。我需要将数据存储在数据库中,使用UUIDGUID作为某些表的主键会很有帮助。我认为这是这种设计的一个缺点,因为 UUID/GUID 非常大并且它们几乎是随机的。另一种方法是使用自动递增的 INT 或 LONG。

使用 UUID 或 GUID 作为我的表的主键有什么缺点?

我可能会使用 Derby/JavaDB(在客户端上)和 PostgreSQL(在服务器上)作为 DBMS。

postgresql primary-key datatypes derby

67
推荐指数
2
解决办法
4万
查看次数

如何在 PostgreSQL 的 Select 查询中使用默认值?

如果没有返回行,我想为应该使用的列使用默认值。这在 PostgreSQL 中可能吗?我该怎么做?或者我还有其他方法可以解决这个问题吗?

例如这样的事情:

SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3
Run Code Online (Sandbox Code Playgroud)

如果org_id = 3表中没有行,我想返回0

postgresql aggregate select default-value

43
推荐指数
3
解决办法
12万
查看次数

如何仅在几毫秒内从 PostgreSQL 获取时间戳列?

timestamp without time zone default now()在 PostgreSQL 数据库中有一个类型为“创建”的列。

如果我选择 colums,默认情况下它有一个漂亮且可读的格式:

SELECT created FROM mytable;

         created
---------------------------
2011-05-17 10:40:28.876944
Run Code Online (Sandbox Code Playgroud)

但我想在几毫秒内获得时间戳(作为一个 Long)。像这样的东西:

SELECT myformat(created) FROM mytable;

     created
-----------------
2432432343876944
Run Code Online (Sandbox Code Playgroud)

如何仅在几毫秒内从 PostgreSQL 获取时间戳列?


回复杰克:

我确实得到与您相同的差异(-3600),但是如果我使用timestamp with time zone我可以看到“错误”或差异是因为 '1970-01-01' 获得 time zone +01

create table my_table_2(created timestamp with time zone);
CREATE TABLE
insert into my_table_2 (created) values (now()), ('1970-01-01');
INSERT 0 2
select created, extract(epoch from created) from my_table_2;
            created            |    date_part
-------------------------------+------------------
 2011-05-18 11:03:16.909338+02 | 1305709396.90934
 1970-01-01 …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp date-format

40
推荐指数
2
解决办法
14万
查看次数