While looking at Jaime's last temp_tablespaces GUC patch, i've got some
concerns about it's current implementation:


The code claims that OIDs of temp tablespaces couldn't be cached, therefore it is parsing and re-reading the GUCs in GetTempTablespace() with SplitIdentifierNames() over and over again. Because GetTempTablespace() is likely to be called many times in queries with a good amount of search operations, i believe this could be done better by allocating a list of OIDs in permanent storage (TopMemoryContext) and use this OID list to re-check them in GetTempTablespace() (i have modified the patch and it seems to work). This would save us to split the GUC every time.


It's possible that someone could drop a temporary tablespace between subsequent usage of GetTempTablespace() when they are empty. This leads to strange NOTICEs like

NOTICE: could not create temporary file "pg_tblspc/16387/pgsql_tmp/pgsql_tmp19942.0"

during query execution. However, the code is save enough and switches back to base/pgsql_tmp then, but this looks a little bit ugly to me. The silent mechanism to drop a tablespace during temporary usage makes me a little bit uncomfortable about its robustness.




---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
      choose an index scan if your joining column's datatypes do not

Reply via email to