标签: postgresql-11

Postgresql 11 基于外键关系中主表中的列对明细表进行分区

版本 11 中基于声明性范围的分区的改进似乎真的适用于我的用例,但我不完全确定外键如何与分区一起工作。

我有一个表Files -< Segments -< Entries,其中每个文件有数百个段,每个段有数百个条目,因此条目大约是文件大小的 10,000 倍。文件有一个 CreationDate 字段,客户将定义一个保留期,以便他们删除旧条目。所有这些都清楚地指向基于日期的分区,因此首先查询最新条目会更快,并且可以轻松删除旧条目。

我遇到的第一个问题是,当我尝试创建 Files 表时,听起来我必须将 createdDate 作为主键的一部分包含在 RANGE 分区中:

CREATE TABLE Files2
  (
    FileId BIGSERIAL PRIMARY KEY,
    createdDate timestamp with time zone,
    filepath character varying COLLATE pg_catalog."default" NOT NULL
  ) PARTITION BY RANGE (createdDate)
  WITH (
    OIDS = FALSE
  )                                
  TABLESPACE pg_default;
ERROR:  insufficient columns in PRIMARY KEY constraint definition
DETAIL:  PRIMARY KEY constraint on table "files2" lacks column "createddate" which is part of the partition key.
Run Code Online (Sandbox Code Playgroud)

如果我从 …

postgresql postgresql-11

5
推荐指数
1
解决办法
5335
查看次数

pgadmin 4 pg_restore: [archiver] 输入文件似乎是文本格式的转储。请使用 psql

嗨,我正在使用 Postgres 11 和 pgadmin 4.1。我有一个 SQL 文件,我试图将其导入到 pgadmin 4 中新创建的数据库中。

我知道这是一个普遍的错误,但我尽力解决它,但对我不起作用。

这是错误:

在此处输入图片说明

下面是一些 SQL 文件行。

在此处输入图片说明

pg-dump pgadmin-4 postgresql-11

5
推荐指数
1
解决办法
7676
查看次数

psycopg2 错误:数据库错误,状态为 PGRES_TUPLES_OK 并且没有来自 libpq 的消息

正在使用的库:

  • Postgresql-11
  • psycopg2-二进制==2.8.2
  • 芹菜==4.3.0

我尝试过升级 psycopg2。

如果我花时间睡觉并尝试的话,这种情况就不会发生。(但是,我猜这是错误的方法。)


db_config = {
    'dbname': "test",
    'user': "*******",
    'password': "*******",
    'host': "*******",
    'port': 5432,
    'cursor_factory': RealDictCursor
}

pool = ThreadedConnectionPool(
    minconn=1, maxconn=8, **db_config
)

def get(self, query, args=None):
    conn = self._get_connection()
    curr = conn.cursor()
    try:
        curr.execute(query, vars=(args or ()))
        result = curr.fetchone()
    except psycopg2.ProgrammingError as error:
        print(error.pgcode)
        raise error
    finally:
        self._put_connection(conn)
    return result
Run Code Online (Sandbox Code Playgroud)

当我查询表时抛出以下错误。

[2019-08-08 10:03:47] 信息 test_run.py 行:51 2019-08-08 10:03:47.040447。

[2019-08-08 10:03:47] INFO request.py 行:43 查询表。

[2019-08-08 10:03:47] 信息 test_run.py 行:51 2019-08-08 10:03:47.074309 …

python-3.x postgresql-11

5
推荐指数
0
解决办法
950
查看次数

将 PostgreSQL 间隔转换为秒会产生错误的值

我正在 Postgresql 中处理一些间隔,但我不确定我是否理解间隔是如何工作的。

我想要做的是将间隔转换为秒。所以我有以下价值观:

select extract ('epoch' from '1 year'::INTERVAL);
Run Code Online (Sandbox Code Playgroud)

产生数字 31557600。如果我们将这个数字除以 (60*60*24),即一天中的秒数,我们得到 365。
所以 postgresql 间隔中的一年有 365 天

select extract ('epoch' from '1 month'::INTERVAL);
Run Code Online (Sandbox Code Playgroud)

产生数字 2592000。如果我们将这个数字除以 (60*60*24),我们得到 30。
所以 postgresql 间隔中的一个月有 30 天。

因此,根据该逻辑,我试图计算以下间隔中的秒数:

select extract ('epoch' from '2 year 2 month 1 day 10 hour 5 minute'::INTERVAL);
Run Code Online (Sandbox Code Playgroud)

我使用以下公式来计算上述查询的结果:

SELECT (years * 365 * 24 * 3600) + (months * 30 * 24 * 3600) + (days * 24 * 3600) + (hours * 3600) + (minutes * …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-11

5
推荐指数
1
解决办法
2881
查看次数

Postgresql pg_dump 对于“块中无效页”数据库无法正常工作

我们在系统上设置了数据库 postgresql 11。大约有8张桌子。这几天我们就面临这个问题

ERROR: invalid page in block 9698 of relation base/16385/16560 SQL state: XX001
Run Code Online (Sandbox Code Playgroud)

根据我的研究,我们应该着手set zero_damaged_pages=on;解决这个问题。我们设置并执行了一些运行良好的选择查询。然后我们决定通过 pg_dump 备份该数据库。此作业未成功完成,但复制了所有记录。

现在,在新系统上,我们导入了备份,我们发现由于发生了数据重复,数据库模式未正确复制到此处。我们用另一个没问题的数据库重复了这个操作。一切正常,包括恢复。

最后,我得出的结论是,由于页面块中的错误,数据库没有正确备份。是否有任何类似set zero_damaged_pages=on;pg_dump 中的选项来忽略错误页面但完成后面或任何其他解决方案。

sql postgresql pg-dump postgresql-11

5
推荐指数
1
解决办法
6080
查看次数

4
推荐指数
1
解决办法
4404
查看次数

将 JS 时间戳转换为带时区的 Postgresql 时间戳

我有一个简单的方法t = Date.now;,它转到通过 REST APIt_time声明的Postresql列timestamp with time zone。我收到错误:date/time field value out of range

不能使用这篇文章中的答案,因为我不编写原始 SQL 而是使用 ORM(Knex.Js)。调用 db 只是为了使转换对我来说看起来有点矫枉过正。js中的任何其他解决方案?

我怎么找不到转换器?我错过了什么吗?

注意:我只需要日期和时间为 hh:mm:ss,我不需要毫秒。

javascript postgresql-11

4
推荐指数
1
解决办法
2259
查看次数

Postgres 将列出我的数据库,但当我尝试连接到它时它不存在

从航站楼,我

sudo su postgres

psql

\l:

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 nwnx      | nwnx     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | …
Run Code Online (Sandbox Code Playgroud)

postgresql corruption postgresql-11

4
推荐指数
1
解决办法
2055
查看次数

将 ISO8601 日期文本转换为时间戳

我正在处理 ISO 8601 中的一些日期,当转换为时间戳时,我在毫秒内遇到了一些奇怪的情况:

SELECT '2020-05-15T19:01:59.002+00:00'::timestamp
2020-05-15 19:01:59:02 <--- wrong milliseconds

SELECT '2020-05-15T19:01:59.022+00:00'::timestamp
2020-05-15 19:01:59:22 <--- wrong milliseconds

SELECT '2020-05-15T19:01:59.22+00:00'::timestamp
2020-05-15 19:01:59:220 <--- ok, but I'm scared
Run Code Online (Sandbox Code Playgroud)

我尝试使用to_timestamp()但找不到解决字符串中 T 的方法。任何指导表示赞赏!

postgresql dbeaver postgresql-11

4
推荐指数
1
解决办法
6236
查看次数

如何重新加载 PostgreSQL 配置

我试图通过设置此标志来启用 PostgreSQL 中的事务日志,其中查询运行时间超过 3 秒

log_min_duration_statement = 3000
Run Code Online (Sandbox Code Playgroud)

如何在不重新启动Postgres的情况下重新加载配置文件?

我已尝试以下选项并收到这些错误

1) postgres=# select pg_reload_config();
**ERROR:  function pg_reload_config() does not exist**
LINE 1: select pg_reload_config();
2) postgres@ospostgresql:/$ /usr/lib/postgresql/11/bin/pg_ctl reload
pg_ctl: no database directory specified and environment variable PGDATA unset
Try "pg_ctl --help" for more information.
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-11

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