
# GDS管道文件常见问题
#### 注意事项
- GDS支持并发导入导出，**gds -t** 参数用于设置GDS的工作线程池大小，控制并发场景下同时工作的工作线程数且不会加速单个SQL任务。**gds -t** 缺省值为8，上限值为200。在使用管道功能进行导入导出时，**-t** 参数应不低于业务并发数。如果是双集群互联互通场景，**-t**参数应不低于业务并发数的两倍。
- 由于管道"读取即删除"的特点，需确保导入或导出过程中除GDS程序外无其他程序读取管道文件，避免导入过程中数据丢失或者任务报错及导出的文件内容混乱。
- 不支持对具有相同Location的外表并发导入导出，即GDS的多个线程同时读取管道文件或者同时写入管道文件。
- GDS的单个导入导出任务只识别一个管道文件，因此不要对GDS外表设置带有通配符({}\[\]?)的Location地址。如：
  ```
  CREATE FOREIGN TABLE foreign_test_pipe_tr( like test_pipe ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://192.168.0.1:7789/foreign_test_*', FORMAT 'text', DELIMITER ',',  NULL '', EOL '0x0a' ,file_type 'pipe',auto_create_pipe 'false');
  ```
  
 
- GDS启用**‐r** 递归参数时只识别一个管道文件，即GDS只会识别当前数据目录下的一个管道文件而不会递归寻找，因此**-r**参数在管道文件导入导出场景下不生效。
- 管道文件的导入导出不支持CN Retry，因为GDS无法控制对端用户和程序操作管道的行为。
- GDS导入时默认对端程序超过1小时未向管道中写入数据导入任务将会超时报错。
- GDS导出时默认对端程序超过1小时未从管道中读数据导出任务将会超时报错。
- 需确保GDS版本和数据库内核版本都已经支持管道文件导入导出功能。
- 当外表参数auto_create_pipe设置为true时，GDS自动创建管道文件可能存在延迟，因此操作管道文件时建议先判断自动创建的管道文件是否存在，且是否为管道文件类型。
- GDS管道文件的导入导出任务结束后会自动删除管道文件，但是手动终止任务时，管道文件的删除会有延迟，直到到达超时时间后才会被删除。
#### 常见问题和定位方法：
- 问题1："/\*\*\*/postgres_public_foreign_test_pipe_tr.pipe" must be named pipe. 定位方法：GDS的外表file_type类型为pipe但是操作的文件却是一个普通文件类型。应该排查postgres_public_foreign_test_pipe_tr.pipe是否为管道文件。
  
- 问题2：could not open pipe "/\*\*\*/postgres_public_foreign_test_pipe_tw.pipe" cause by Permission denied. 定位方法：GDS没有权限打开管道文件。
  
- 问题3：could not open source file /\*\*\*\*\*/postgres_public_foreign_test_pipe_tw.pipe because timeout 300s for WRITING. 定位方法：GDS导出时打开管道文件超时，一般由于auto_create_pipe为false时候，管道文件在300秒内未被创建，或者创建了但是300秒内没有程序读取该管道文件。
  
- 问题4：could not open source file /\*\*\*\*\*/postgres_public_foreign_test_pipe_tw.pipe because timeout 300s for READING. 定位方法：GDS导出时打开管道文件超时，一般由于auto_create_pipe为false时候，管道文件在300秒内未被创建或者创建了但是300秒之内没有程序写入该管道文件。
  

- 问题5：could not poll writing source pipe file "/\*\*\*\*/postgres_public_foreign_test_pipe_tw.pipe" timeout 300s. 定位方法：GDS导出时超过300秒未等到管道上的写事件，一般由于该管道文件超过300秒没有被读取。
  

- 问题6：could not poll reading source pipe file "/\*\*\*\*/postgres_public_foreign_test_pipe_tw.pipe" timeout 300s. 定位方法：GDS导入时超过300秒未等到管道上的读事件，一般由于该管道文件超过300秒没有被写入。
  
- 问题7：could not open pipe file "/\*\*\*/postgres_public_foreign_test_pipe_tw.pipe" for "WRITING" with error No such device or address. 定位方法：表示当前"/\*\*\*/postgres_public_foreign_test_pipe_tw.pipe"管道文件没有程序正在读取导致GDS无法以写的方式打开管道文件。
  
 
