我有下表名为" name"在一个名为" name"的数据库中。我没有在服务器上备份其他数据库的问题。但对于这个数据库,我收到以下错误
df = pd.concat([df]*10000)
%timeit df['new'] = df.name2.eq(df.name1).astype(int).groupby(df.name1).transform('sum')
# 100 loops, best of 3: 4.85 ms per loop
%%timeit
cnt = df.groupby('name1').apply(lambda g: (g.name1 == g.name2).sum())
df['new'] = df.name1.map(cnt)
# 10 loops, best of 3: 22.1 ms per loop
我的架构
root@latitude:~/pg_backup_lenovo# pg_dump -h 192.168.1.201 -U superusername name > name.dump
pg_dump: [archiver (db)] query failed: ERROR: malformed record literal: "bigint"
LINE 1: SELECT 'bigint'::name AS sequence_type, start_value, increme...
^
DETAIL: Missing left parenthesis.
pg_dump: [archiver (db)] query was: SELECT 'bigint'::name AS sequence_type, start_value, increment_by, max_value, min_value, cache_value, is_cycled FROM name_id_seq
我不确定这里发生了什么。这可能是一个可能的错误吗?
答案 0 :(得分:3)
name
是位于pg_catalog
命名空间中的内置类型。
在public
架构中创建具有该名称的表时,会创建该表
另一种类型在name
模式中也称为public
,因为
每个表也是一个复合类型。您可以使用select * from pg_catalog.pg_type where typname='name'
name
时, 通常,查询也是如此
失败(SELECT 'bigint'::name AS sequence_type...
),就是这样
输入被pg_catalog
的{{1}},因为pg_catalog
在public
之前隐式显示
在search_path
中,如doc中所述:
除了公共和用户创建的模式,每个数据库 包含一个pg_catalog模式,其中包含系统表和所有 内置的数据类型,函数和运算符。 pg_catalog是 始终有效地成为搜索路径的一部分。如果它没有命名 显然在路径中然后在搜索之前隐式搜索它 路径的模式。这可确保内置名称始终如一 玛丽萨。但是,你可以明确地将pg_catalog放在最后 如果您希望覆盖用户定义的名称,则为您的搜索路径 内置名称。
使用'bigint'::name
获取的错误消息表示
postgres用相应的类型解析了强制转换
在public
架构中显示您的表格,而显然pg_dump
期望它会找到内置的name
类型。
所以看起来你在上面引用的段落中强调的情况下,与内置类型冲突,至少对pg_dump
而言。
要测试该理论,请查看search_path
用户运行pg_dump
并尝试在将其重置为无关值后再次转储,例如:
ALTER USER user_running_pg_dump SET search_path TO public;