标签: postgresql

在实时数据库上运行 pg_dump 会产生一致的备份吗?

我有一个不断修改的 3GB 数据库,我需要在不停止服务器的情况下进行备份(Postgres 8.3)。

我的 pg_dump 运行了 5 分钟。如果数据在这个过程中被修改了怎么办?我可以获得一致的备份吗?我不想知道灾难何时发生。

Postgres 文档http://www.postgresql.org/docs/8.3/static/app-pgdump.html对此没有任何说明。

postgresql

51
推荐指数
3
解决办法
4万
查看次数

使用大 IN 优化 Postgres 查询

此查询获取您关注的人创建的帖子列表。您可以关注无限数量的人,但大多数人关注 < 1000 人。

使用这种查询方式,明显的优化是缓存"Post"id,但不幸的是我现在没有时间这样做。

EXPLAIN ANALYZE SELECT
    "Post"."id",
    "Post"."actionId",
    "Post"."commentCount",
    ...
FROM
    "Posts" AS "Post"
INNER JOIN "Users" AS "user" ON "Post"."userId" = "user"."id"
LEFT OUTER JOIN "ActivityLogs" AS "activityLog" ON "Post"."activityLogId" = "activityLog"."id"
LEFT OUTER JOIN "WeightLogs" AS "weightLog" ON "Post"."weightLogId" = "weightLog"."id"
LEFT OUTER JOIN "Workouts" AS "workout" ON "Post"."workoutId" = "workout"."id"
LEFT OUTER JOIN "WorkoutLogs" AS "workoutLog" ON "Post"."workoutLogId" = "workoutLog"."id"
LEFT OUTER JOIN "Workouts" AS "workoutLog.workout" ON "workoutLog"."workoutId" = "workoutLog.workout"."id"
WHERE
"Post"."userId" IN …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index optimization postgresql-performance

51
推荐指数
2
解决办法
7万
查看次数

如何在 pgAdmin III 中查看数据

我不敢相信他们让事情变得如此困难。我不知道如何查看我的数据库中的数据。

有没有一种简单的方法可以使用 pgAdmin III 查看我的表中的数据?或者,是否有我可以使用的程序不烂?

postgresql pgadmin-3

50
推荐指数
2
解决办法
9万
查看次数

错误:没有选择要在其中创建的架构

我正在处理一个 amazon RDS postgresql 数据库,我知道公共模式存在一些问题(也许它被删除了)。但显然模式存在,无论如何问题没有解决。这是一个使用新创建的空数据库的示例会话:

mydb=> CREATE TABLE distributors (
mydb(>     did     integer,
mydb(>     name    varchar(40) UNIQUE
mydb(> );
ERROR:  no schema has been selected to create in
mydb=> show search_path;
  search_path   
----------------
 "$user",public
(1 row)

mydb=> create schema public;
ERROR:  schema "public" already exists
Run Code Online (Sandbox Code Playgroud)

任何提示?我应该寻找什么?

解决了。 感谢 Daniel Vérité 的回答,我已经解决了以下问题:

grant usage on schema public to public;
grant create on schema public to public;
Run Code Online (Sandbox Code Playgroud)

这些是公共架构的默认权限吗?

我有一个可以访问数据库的用户,所以我认为这无论如何都不会增加安全风险......

我想我应该对template1进行相同的修改。这是正确的吗?如何检查 template1 中的权限是否正确(例如,默认值)?

schema postgresql amazon-rds

50
推荐指数
3
解决办法
10万
查看次数

如何将(文件)数据插入 PostgreSQL bytea 列?

这个问题不是关于 bytea v. oid v. blob v. large objects 等。

我有一个包含主键integer字段和bytea字段的表。我想在该bytea字段中输入数据。据推测,这可以由其中一种PL/语言完成,我PL/Python将来可能会考虑这样做。

由于我仍在测试和试验,我只想使用“标准”SQL 语句从文件(在服务器上)插入数据。我知道只有在服务器上具有写入权限的管理员才能以我想要的方式插入数据。在这个阶段我并不担心,因为用户bytea目前不会插入数据。我已经搜索了各种 StackExchange 站点、PostgreSQL 档案和互联网,但一直没有找到答案。

编辑: 这个2008 年的讨论意味着我想做的事情是不可能的。那么如何使用bytea字段呢?

编辑: 2005 年的这个类似问题仍未得到解答。

解决:所提供的细节在这里上的psycopg网站,我用Python编写的解决方案提供了基础。也可以使用 将二进制数据插入到bytea列中PL/Python。我不知道这是否可以使用“纯”SQL。

postgresql plpgsql datafile blob

49
推荐指数
4
解决办法
16万
查看次数

如何在没有外部类似 cron 的工具的情况下在 Postgresql 上运行重复任务?

我想定期调用存储过程。在 Oracle 上,我会为此创建一个工作。我发现 Postgresql 可以通过使用外部工具(cron 等)和 PgAgent 很好地模拟这一点。

您是否知道不涉及外部工具的“内部”替代方案?

  • 我想避免存储在 pgAgent 命令行上的密码的安全问题。
  • 我想避免任何用于隐藏密码 ( ~/.pgpass) 的额外系统配置。

Postgresql 8.3
Linux RedHat 64 位

postgresql jobs scheduled-tasks

48
推荐指数
3
解决办法
9万
查看次数

“存储过程”和“存储函数”有什么区别?

所以这个问题的评论提到,PostgreSQL 中的“存储过程”和“存储功能”略有不同。

评论链接到维基百科文章,但其中一些似乎并不适用(例如,它们可以在SELECT声明中使用)。

语法本身似乎有点混乱:

CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$
    BEGIN
       [...]
    END;
$emp_stamp$ LANGUAGE plpgsql;

CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
    FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
Run Code Online (Sandbox Code Playgroud)

您创建了一个FUNCTION但将其称为PROCEDURE.

那么这两者有什么区别呢?

postgresql stored-procedures plpgsql

47
推荐指数
6
解决办法
5万
查看次数

PostgreSQL EXCLUDE USING 错误:数据类型整数没有默认操作符类

在 PostgreSQL 9.2.3 我试图创建这个简化的表:

CREATE TABLE test (
    user_id INTEGER,
    startend TSTZRANGE,
    EXCLUDE USING gist (user_id WITH =, startend WITH &&)
);
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

ERROR:  data type integer has no default operator class for access method "gist"
HINT:  You must specify an operator class for the index or define
       a default operator class for the data type.
Run Code Online (Sandbox Code Playgroud)

PostgreSQL的文档使用这个例子不为我工作:

CREATE TABLE room_reservation (
    room text,
    during tsrange,
    EXCLUDE USING gist (room WITH =, during WITH &&)
);
Run Code Online (Sandbox Code Playgroud)

同样的错误信息。

而这个对我来说也不起作用: …

postgresql constraint installation exclusion-constraint gist-index

47
推荐指数
2
解决办法
3万
查看次数

WHERE 子句是否按照它们的编写顺序应用?

我正在尝试优化一个查询,该查询查看一个大表(3700 万行),并有一个关于在查询中执行操作的顺序的问题。

select 1 
from workdays day
where day.date_day >= '2014-10-01' 
    and day.date_day <= '2015-09-30' 
    and day.offer_id in (
        select offer.offer_day 
        from offer  
        inner join province on offer.id_province = province.id_province  
        inner join center cr on cr.id_cr = province.id_cr 
        where upper(offer.code_status) <> 'A' 
            and province.id_region in ('10' ,'15' ,'21' ,'26' ,'31' , ...,'557') 
            and province.id_cr in ('9' ,'14' ,'20' ,'25' ,'30' ,'35' ,'37')
    )
Run Code Online (Sandbox Code Playgroud)

WHERE日期范围的子句是否在子查询之前执行?将最严格的子句放在首位以避免其他子句的大循环,以便更快地执行是否是一种好方法?

现在查询需要很多时间来执行。

postgresql performance postgresql-performance

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

EXISTS (SELECT 1 ...) vs EXISTS (SELECT * ...) 一个还是另一个?

每当我需要检查表中某行是否存在时,我总是倾向于编写如下条件:

SELECT a, b, c
  FROM a_table
 WHERE EXISTS
       (SELECT *  -- This is what I normally write
          FROM another_table
         WHERE another_table.b = a_table.b
       )
Run Code Online (Sandbox Code Playgroud)

还有一些人这样写:

SELECT a, b, c
  FROM a_table
 WHERE EXISTS
       (SELECT 1   --- This nice '1' is what I have seen other people use
          FROM another_table
         WHERE another_table.b = a_table.b
       )
Run Code Online (Sandbox Code Playgroud)

当条件NOT EXISTS不是EXISTS: 在某些情况下,我可能会用 aLEFT JOIN和一个额外的条件(有时称为antijoin)来编写它:

SELECT a, b, c
  FROM a_table
       LEFT JOIN another_table ON another_table.b = …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql oracle sql-server

47
推荐指数
5
解决办法
11万
查看次数