select tablename from pg_tables where schemaname='public' and tablename not in (SELECT child.relname AS child_table FROM pg_inherits JOIN pg_class parent ON pg_inherits.inhparent = parent.oid JOIN pg_class child ON pg_inherits.inhrelid = child.oid JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace) order by 1;
时间: 2024-04-05 18:30:54 浏览: 13
这是一条 PostgreSQL 数据库查询语句,用于查找指定 schema(在此为 public)下的所有表名,并排除继承关系的表。其具体作用如下:
1. 通过 `pg_tables` 系统目录表,筛选指定 schema(在此为 public)下的所有表名,使用 `schemaname` 和 `tablename` 进行筛选。
2. 使用子查询查找继承关系的表,即父表和子表,使用 `pg_inherits` 系统目录表来查找这个关系。通过 `inhparent` 和 `inhrelid` 可以找到父表和子表的 `oid`。然后使用 `pg_class` 系统目录表找到表的详细信息,包括表名和 schema。最后,使用 `pg_namespace` 系统目录表来查找 schema 的详细信息,并与表的详细信息一起使用以获取完整的表名。
3. 将不在子查询结果中的所有表名按照字母顺序排序,并返回结果。
该查询语句的作用是查找指定 schema 下的所有非继承关系的表名。在数据迁移过程中,可以使用此查询来列出需要进行数据清理和转换的表,以便执行后续的数据迁移操作。
相关问题
test=# SELECT * FROM pg_dump_catalog; 错误: 关系 "pg_dump_catalog" 不存在 第1行SELECT * FROM pg_dump_catalog;
如果在 Kingbase 数据库中,使用 `SELECT * FROM pg_dump_catalog;` 命令查询备份信息,提示表不存在,可能是因为该表没有被创建,或者是权限不足。
你可以使用以下命令来检查是否存在名为 pg_dump_catalog 的表:
```
SELECT tablename FROM pg_tables WHERE tablename = 'pg_dump_catalog';
```
如果该命令返回结果为空,则说明该表不存在。如果该表不存在,你需要先创建该表,再查询备份信息。
创建 pg_dump_catalog 表的命令如下:
```
CREATE TABLE pg_dump_catalog (dump_id serial primary key, dump_date timestamp default now(), dump_file text);
```
创建表后,你可以使用 pg_dump 工具或其他备份工具进行备份,并将备份信息插入到 pg_dump_catalog 表中,例如:
```
INSERT INTO pg_dump_catalog (dump_file) VALUES ('/backup/2022-01-01.dump');
```
之后,你就可以通过以下命令来查询备份信息:
```
SELECT * FROM pg_dump_catalog;
```
如果你仍然无法查看备份信息,可能是因为你没有足够的权限来查询该表。你可以检查当前用户的权限,或者使用超级用户登录数据库来查询备份信息。
SELECT * from acq_info where pid is null 生成mybatis-plus代码
生成 Mybatis-Plus 代码,需要进行以下几个步骤:
1. 创建 Java 项目,并引入 Mybatis-Plus 和相关依赖包。
2. 创建实体类 AcqInfo,包含表中所有字段,并使用 @TableName 注解指定表名。
```
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("acq_info")
public class AcqInfo {
private Long id;
private String acqCode;
private String acqName;
private Long pid;
}
```
3. 创建 Mapper 接口 AcqInfoMapper,继承 BaseMapper<AcqInfo> 并添加 SQL 方法。
```
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface AcqInfoMapper extends BaseMapper<AcqInfo> {
List<AcqInfo> selectByPidIsNull();
}
```
4. 创建 Service 接口 AcqInfoService,并定义方法调用 Mapper 中的 SQL 方法。
```
public interface AcqInfoService extends IService<AcqInfo> {
List<AcqInfo> getByPidIsNull();
}
```
5. 创建 Service 实现类 AcqInfoServiceImpl,并注入 Mapper 对象。
```
@Service
public class AcqInfoServiceImpl extends ServiceImpl<AcqInfoMapper, AcqInfo> implements AcqInfoService {
private final AcqInfoMapper acqInfoMapper;
public AcqInfoServiceImpl(AcqInfoMapper acqInfoMapper) {
this.acqInfoMapper = acqInfoMapper;
}
@Override
public List<AcqInfo> getByPidIsNull() {
return acqInfoMapper.selectByPidIsNull();
}
}
```
6. 在 Controller 中注入 Service 对象,并调用方法获取数据。
```
@RestController
@RequestMapping("/acqInfo")
public class AcqInfoController {
private final AcqInfoService acqInfoService;
public AcqInfoController(AcqInfoService acqInfoService) {
this.acqInfoService = acqInfoService;
}
@GetMapping("/pidIsNull")
public List<AcqInfo> getByPidIsNull() {
return acqInfoService.getByPidIsNull();
}
}
```
以上是根据 SQL 语句 SELECT * from acq_info where pid is null 生成 Mybatis-Plus 代码的步骤。